2011-07-12 12 views
0
public char[] calculateGrade(int [] scores, char [] grades){ 
    for (int r = 0; r < scores.length; r++){ 
     //System.out.println(scores[r] + " "); 
     if (scores[r] > 90) 
      grades[r] = 'A'; 
     else if (scores[r] > 80) 
      grades[r] = 'B'; 
     else if (scores[r] > 70) 
      grades[r] = 'C'; 
     else if (scores[r] > 60) 
      grades[r] = 'D'; 
     else 
      grades[r] = 'F'; 
    for (int i = 0; i < grades.length; i++) 
     System.out.println(grades[i]); 

    } 
    return grades; 

} 

上記は、ファイルから得点を取り、文字の等級に変換する私の全体的なプログラムの小さな部分です。私はこれらの文字の等級をそのファイルに入れる必要があります。文字のグレードはスコアに対応する必要があります。一度に1つのラインで26の異なるスコアがあります。私はここに私の全体のコードを置くだろうが、それは本当に長いです。みんな助けて!Java配列のヘルプ:出力ファイルに保存

+1

。私は本当に混乱しています... – Josh

+0

ところで、私はあなたのコードでこの問題を誰も言及していません。ループは入れ子になっています。あなたがスコアを読むたびに、あなたはすべての成績を印刷します。ブラケットには注意してください。 – besamelsosu

答えて

3

それぞれの方法に1つのことを行い、うまくやることをお勧めします。成績を計算して印刷しないでください。

public void printGrades(PrintStream ps, char [] grades) { 
    for (char grade : grades) { 
     ps.println(grade); 
    } 
} 

public char[] calculateGrade(int [] scores){ 

    char [] grades = new char[scores.length]; 

    for (int r = 0; r < scores.length; r++){ 
     if (scores[r] > 90) 
      grades[r] = 'A'; 
     else if (scores[r] > 80) 
      grades[r] = 'B'; 
     else if (scores[r] > 70) 
      grades[r] = 'C'; 
     else if (scores[r] > 60) 
      grades[r] = 'D'; 
     else 
      grades[r] = 'F'; 
    } 
    return grades; 

} 
+0

と私は、彼はファイルからのスコアだけを読み込むと思います。したがって、calculateGrade()のパラメータとしての「char []等級」も間違ったアプローチです。 –

+0

私は理解していない、あなたは明らかにメソッドでグレード配列を作成し、それをクラスに返すが、クラスはそれをどのように理解するのだろうか。それはローカル変数ではありませんか? – Josh

+0

カット&ペーストのソリューションが好まれていないことを認識した後で、パラメータリストから「char []等級」を取り出しました。 – duffymo

1
だけで、次のためにあなたの方法を変更し

public void calculateGrade(int[] scores, char[] grades){ 
    for (int r = 0; r < scores.length; r++) { 
     if (scores[r] > 90) 
      grades[r] = 'A'; 
     else if (scores[r] > 80) 
      grades[r] = 'B'; 
     else if (scores[r] > 70) 
      grades[r] = 'C'; 
     else if (scores[r] > 60) 
      grades[r] = 'D'; 
     else 
      grades[r] = 'F'; 
    } 
} 

配列はとにかく、参照によって渡されるので、gradesを返す必要はありません。次に、あなたの呼び出し方法(main?)で、あなたはあなたが望むファイルにgradesを書き込むべきです。

相談し、ファイルに書き込む:http://www.exampledepot.com/egs/java.io/WriteToFile.html

だから、のような何か:forループの最後にのみ全学年を複数回印刷し

try { 
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("filename"))); 

    for(char grade : grades) 
     out.println(grade); 

    out.close(); 
} catch (IOException e) { } 
+0

おかげで、最後の部分は少し複雑です。私はジュニアCS学生ですが、これまでのキーワードについては学んでいません。だから私はそれを簡単に保つ必要があります。しかし、私は最初の部分を理解しています! – Josh

+0

これはファイルに書き込む方法です。 'try'や' catch'を心配しないでください。ファイルへの書き込みを除いて 'System.out.println'と同様に' out.println'と考えるだけです。 – tskuzzy

関連する問題