2017-02-21 16 views
0

私は初年度のプログラマーです。文字と数字を組み合わせて配列を検索する

私は4つの変数を格納している配列を検索しようとしていました。

私が見つけたすべての例では、intを使用してリスト内の数値を検索しています。

私のプログラムでは、文字と数字の組み合わせを検索する必要があります。 (例:COP 2800)

import java.util.Scanner; 

public class courseInfo { 
    public static int courseInfo(int[] list, int key) { 

     Scanner input = new Scanner(System.in); 

     // Input course name 
     System.out.print("Enter course name: (Ex. COP 2800) "); 
     double courseInput = input.nextDouble(); 

     for (int i = 0; i < list.length; i++) { 
     if (key == list[i]) 
      return i; 

     } 
     return -1; 
     } 

     public static void main(String[] args) { 
     int[] list = {COP 2800, PSY 1012, EVR 2001, COP 1000}; 
     System.out.println(linearSearch(list, courseInput)); 
    } 
} 

私はこのクラスに3週間しかいませんでした。

21行目からCOP、PSY、EVR、COPを削除すると、別のエラーが返されます。

courseInfo.java:22: error: cannot find symbol 
     System.out.println(linearSearch(list, courseInput)); 
              ^
    symbol: variable courseInput 
    location: class courseInfo 
1 error 
+0

:その場合、あなたのコードは次のようになります。 2番目の質問は 'linearSearch'メソッドが定義されているところです。また、 'int []'はコンパイルされません。「COP 2800」は整数ではありません。 'String'はオブジェクトであるため、' String [] 'の使用を検討し、' == 'の代わりに' equals() 'を使用してください。 – Jyr

+0

エラーが多すぎます...しかし、まずは: 'linearSearch'メソッドはどこに定義されていますか? – azurefrog

答えて

0

intであるはずのcourseInputを使用して、String値の等しい条件をチェックしています。

また、if条件で何が起きても-1を返します。 keyの値がリストの値と等しくなければ、-1を返すはずですか?

また、courseInput変数はメソッドに対してローカルです。それをメンバー変数としてクラス内で宣言することにより、グローバルにします。

+0

はい、私は、検索されたキーワードが見つからない場合には、エラーを生成してエラーが発生するはずです。 – Vykn

+0

はelse文 を追加した場合(条件){// コード }他{ リターン-1 } – Ronald

0

あなたはdouble courseInput = input.nextDouble()ですが、これは文字ではなく倍数のみを受け入れます。 int[] listもあります。これは整数の配列なので、文字を保持することもできません。コース名全体(文字と数字の両方)を文字列に入れると、より良い運を得られます。次に、行全体をスキャンし、文字列の配列に格納することができます。

+0

さて、文字列は文字&整数の組み合わせを受け入れるだろうか? – Vykn

+0

はい、整数は 'int'形式ではありません。私はあなたの目標が単にコースの名前を印刷することだと仮定しています。そうです、あなたは "COP 2800"を印刷することができます。計算に整数が必要な場合(たとえば、COP 1000が2800より前に表示されるようにソートするなど)、整数に変換する必要があります – bluecanary

0

これを試す前に、Javaの基本データ型についてもう少し作業をすることをお勧めします。 Javaはかなりstrictly typedの言語です。これは、一般的に(多くの例外があります)、事前に変数に格納する値のタイプを決定する必要があることを意味します。あなたのコードには多くの型が混在しています:整数、倍精度と文字列。

コースの識別子が名前の番号であるかどうかを判断することから始めます。数字の場合は、intを使用して保存することができます。名前の場合はStringを使用できます。件名には文字と数字が含まれています。しかし、数字を直接比較する必要がない限り、識別子全体をStringに格納することができます。それらを分割する必要はありません。

新しいスターターのもう一つの一般的なトラップは、プリミティブタイプ(intなど)がオブジェクト(例えばStringなど)とはかなり異なる動作をするということです。直接の違いは==の意味です。プリミティブ型の場合は、値が比較され、オブジェクトの場合は左右が同じオブジェクトを参照しているかどうかがチェックされます。

私はあなたの主題を名前で識別したいと思う(すなわちString)。それが唯一の `courseInfo`方法に存在する主な方法は、` courseInput`変数を知らない

String[] subjects = {"COP2800", "PSY1012", "EVR2001"}; 

for (int i = 0; i < subjects.length; i++) { 
    if (subjects[i].equals(name)) 
     return i; 
} 
return -1; 
関連する問題