2011-11-12 12 views
1

は私がやろうとしているものですが等しいです。ユーザーがコース名(「CS 110」など)を入力し、コースが開催されている曜日と時間(Th 3:30など)を表示できるようにします。コースが存在しない場合は、エラーメッセージを表示します。JavaのString()メソッドと多次元配列ここ

は、ここで私が持っているコードです:

import javax.swing.JOptionPane; 
import java.util.Scanner; 

public class Schedule { 
    public static void main(String[] args) { 
     //declare variables and arrays 
     final int NUM_RANGES = 3; 
     int sub = NUM_RANGES - 1; 

     String[][] classNames = { 
      {"CS 2401", "TS 5697", "UO 7896"}, 
      {"Tue 8:30", "Thu 7:30", "Fri 9:15" } 
     }; 

     //get input 
     String classInput = JOptionPane.showInputDialog("Please input a class name: "); 

     //match to output and print 
     while(sub >= 0) 
      --sub; 

     if (classInput.equals(classNames[0])) { 
      JOptionPane.showMessageDialog(null, "Class time is: " + classNames[0][0]); 
      System.exit(0); 
     } else if (classInput.equals("TS 5697")) { 
      JOptionPane.showMessageDialog(null, "Class time is: " + classNames[1][1]); 
      System.exit(0); 
     } else if (classInput.equals("UO 7896")) { 
      JOptionPane.showMessageDialog(null, "Class time is: " + classNames[2][2]); 
      System.exit(0); 
     } else { 
      JOptionPane.showMessageDialog(null, "Please enter a valid class  name."); 
      System.exit(0); 
     } 
    } 
} 

あなたが見ることができるように、私は最初のIFにequalsメソッドをやろうとしているが、それを把握することはできません。ご協力ありがとうございました。

+0

実際に何がうまくいかないのですか? – Egor

+0

私はこの問題を「宿題」とタグ付けしました。それは明らかです。 – home

+1

副次的な言い方をすれば、 'sub'変数は冗長で削除できるようです。値-1に(while(sub> = 0)ループが完了した後に)値が代入され、再び使用されることはありません。 – matsev

答えて

0

2次元配列(arr)では、アクセスするインデックスの行と列(arr [row] [column])を指定する必要があります。毎回。だから、それはあなたが必要とするようになっています

if (classInput.equals(classNames[0][0])) 
1

はあなたではなく、裸classNames[0]よりclassNames[0][0]を必要としています。

しかし、実際には、このために2次元配列を使用するべきではありません。 Map<String, String>を使用してコース名から会議時間にマップするか、コース名と会議時間(およびその他の必要な情報)の両方を含む小さなCourseクラスを作成し、Map<String, Course>コース名からCourseのインスタンスにマップします。

0

すべてのJavaオブジェクトは、toString()メソッドを持つjava.lang.Objectから継承されます。オブジェクトのStringを返します。すべてのクラスがそれをオーバーライドできるので、新しいtoString()が望ましい文字列を返します。しかし、デフォルトでは、このObjectのランタイムコードを返します。

すべてでは、classNames[0]はStringに変換されます。あなたの疑問を捉えますか?

しかし、あなたはここでエラーを持っている:

else if (classInput.equals("UO 7896")) { 
    JOptionPane.showMessageDialog(null, "Class time is: " + classNames[2][2]); 
    System.exit(0); } 

あなたはclassNames[2]を持っていません。

0

StringString[]をこのように比較することはできません。すべての要素を繰り返し処理する必要があります。

for(String className : classNames[0]) { 
    if(className.equals(classInput)) { 
     //found ... do something 
    } 
} 

キー値にMap<String, String>を使用すると、コードは簡単になります。また、Stringの定数を使用している場合は、"Constant string".equals(var)の左辺で定数を使用します。これにより、NullPointerExceptionが発生しないことが保証されます。

0

大文字と小文字は区別されます。equalsIgnoreCaseを使用してみてください。また、trim()を使用して文字列をトリムすると、空白がないようになります。