2012-02-01 9 views
1

この特定のセクションの私のプログラムは、のような値であるstudentAnswer文字列配列からデータ行を取ります。私はこれを取って、それをTFFFTFTFTFのようなキー配列と比較することになっています。生徒はクイズをとり、私のプログラムは正しい点を計算します。Javaはループ、論理問題のシンボルを見つけることができませんか?

私の意図は、学生の数値のグレードを見つけるために別のポイント配列を使用することです。 studentAnswerというインデックスは、特定の生徒を指します。従ってstudentAnswer[i]TTFFTFTFTFです。サブストリングを使用して、個々のT/Fとkey[]の正解とを比較します。これは、各インデックスに単一のT/Fを持つことになります。答えが正しい場合は、points[]に相関インデックスに1を加え、後でpoints[]の合計を見つけて10のうちの数字のグレードを見つけます。

ここでの問題は、生徒の元の回答文字列を定義するために使用される文字列origAnsが、Javaエラーを取得してシンボルを見つけることができないことです。私はそれぞれ異なるforループ内にorigAnsのインスタンスを配置しようとしましたが、私はプログラムを動作させることができません。 Int iは、それぞれの特定の生徒に従うことを意図しています。私は4つの並列配列を持っており、生徒のID番号、数値グレード、レターグレード、および元の回答が記録されます。それはiの意図であり、各学生を通過することです。そしてjを使って元の生徒の答えの文字列を調べ、それを正解と比較してください。 論理的には、どこに置くのが理にかなっていますが、Javaは同意しません。このエラーを理解するのを助けてください!

for (int i = 0; i < studentAnswer.length; i++){ 
    String origAns = studentAnswer[i]; 
    for (int j = 0; j < key.length; j++){ 
     if (origAns.substring[j] == key[j]){ 
      //substring of index checked against same index of key 
      points[j] = 1; 
     } 
     if (origAns.substring[j] != key[j]){ 
      points[j] = 0; 
     } 
    } 
} 
+0

比較 'origAns.substring [J] ==キー[J] '参照のみを比較すると、' key [j] .equals(origAns.substring [j]) ' – A4L

+0

を使用する必要があり、' origAns.substring(j) '...'() 'の代わりに'[]' – A4L

答えて

2

あなたはsubstringメソッドを呼び出すようにしようとしているように聞こえる - しかし、あなたはそれがフィールドであるかのようにそれにアクセスしようとしています。だから、最初の変更は次のようになります。あなたが望むかもしれないので、それを除いて

if (origAns.substring(j) == key[j]) 

は、文字列参照の代わり内容を比較されます:実際に

if (origAns.substring(j).equals(key[j])) 

、私はあなたが取得するcharAtをしたい疑います単一の文字 - substringは、指定されたインデックスの後にすべての文字列を返します。

if (origAns.charAt(j) == key[j]) 

...ここでkeychar[]となります。

else句を代わりに使用することによって、「反対の」比較を実行しないようにすることもできます。

読みやすくするために、コードをさらに慎重にインデントする必要があります。たとえば、次のように

for (int i = 0; i < studentAnswer.length; i++) { 
    String origAns = studentAnswer[i]; 
    for (int j = 0; j < key.length; j++) { 
     if (origAns.charAt(j) == key[j]) { 
      points[j] = 1; 
     } else { 
      points[j] = 0; 
     } 
    } 
} 

そして今、あなたは、if /他の代わりに条件式を使用することを変更することができます。

for (int i = 0; i < studentAnswer.length; i++) { 
    String origAns = studentAnswer[i]; 
    for (int j = 0; j < key.length; j++) { 
     points[j] = origAns.charAt(j) == key[j] ? 1 : 0; 
    } 
} 
+0

ありがとう!非常に徹底して、私はそれを感謝します! – pearbear

0

あなたの説明は非常に長いですし、私からそれを読んでいません終わりの終わり。、あなたはJavaでメソッドを呼び出すと

if (origAns.substring[j].equals(key[j]))

1

if (origAns.substring[j] == key[j])

あなたは代わりの方法equals()を使用しての==を使用して文字列を比較している。しかし、私はあなたのコード内の少なくとも1つの問題を見ることができます大括弧()を角かっこ[]の代わりに使用します。

substringが方法ですので、あなたがそう

if (origAns.substring(j) == key[j]) 

他のいくつかのノートのようにそれを呼び出す必要があり、あなたは比較にequalsメソッドを使用する必要がありますに(特にString Sを含むもの比較​​。)

if (origAns.substring(j).equals(key[j])) 

また、charAtを使用して、文字列内のある位置に1文字を抽出する必要があります。 substring(j)は、位置jから始まる文字列を返します。

if (origAns.charAt(j).equals(key[j])) 
0

あなたはchar型の配列を使用している場合は、文字列の使用のcharAt機能エルス

String studentAnswer = "TTFFTFTFTF"; 
for (int i = 0; i < studentAnswer.length(); i++) 
{ 
    char origAns = studentAnswer.charAt(i); 
     } 

を使用している場合は、

char studentAnswer[] = "TTFFTFTFTF".toCharArray(); 
     for (int i = 0; i < studentAnswer.length; i++){ 
      char origAns = studentAnswer[i]; 
     } 
関連する問題