2017-01-21 10 views
-2

私の問題は、私は、出力する形式の別のファイルに3人の生徒の得点のためのlettergradeをしたいということです。別のメソッドからArrayListに表示

ここで私が直面している問題は、toString2メソッドにスクロールしてプログラムを実行し、3つのスコアを取り、計算結果に応じて正しい文字グレードを出力することです。代わりに私のプログラムは制御されていないループに入り、[]で終わります。どうすればこの問題を解決できますか?

package file; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class ReadData2 
{ 
ArrayList<String> name = new ArrayList<String>(); 
ArrayList<Double> score = new ArrayList<Double>(); 
ArrayList<String> lettergrade = new ArrayList<String>(); 
double mean; 
double std; 

public ReadData2() 
{ 
    mean= 0; 
    std=0; 
} 
public void readData(File file) throws FileNotFoundException 
{ 
    //File file = new File("data.txt"); 
    Scanner scanner = new Scanner(file); 
    int l = 0; 


    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     String [] words = line.split("\t"); 
     name.add(words[0]); 
     score.add(Double.parseDouble(words[1])); 
    } 
} 

public String toString() 
{ 

    StringBuilder out = new StringBuilder(); 
    for(String n: name) 
    { 
     out.append(n); 
     out.append("\n"); 

    } 
    for(double n: score) 
    { 
     out.append(n); 
     out.append("\n"); 
    } 
    return out.toString();  
} 

public double fndMean() 
{ 
    double mean = 0; 
    double sum = 0; 
    for(Double n: score) 
    { 
     sum= sum+n; 
    } 
    mean= sum/score.size(); 
    return mean; 
} 

public double fndStandard() 
{ 
    double sumOfDifferences = 0; 
    double mean = fndMean(); 
    for(Double n: score) 
    { 
     sumOfDifferences += Math.pow((n- mean),2); 
    } 
    double temp = sumOfDifferences/ score.size(); 
    return Math.sqrt(temp); 
} 
public ArrayList<String> toString2(File file) throws FileNotFoundException 
{ 
    StringBuilder grades = new StringBuilder(); 
    double mean1 = fndMean(); 
    double std1 = fndStandard(); 

    Scanner scanner = new Scanner(file); 
    int l = 0; 

    while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     String [] words = line.split("\t"); 
     name.add(words[0]); 
     score.add(Double.parseDouble(words[1])); 

     for(double n: score) 
     { 
      grades.append(n); 
      grades.append("\n");  
     } 


     for(int i = 0; i < ((score.size())) && i < name.size(); i++) 
     { 
      if(mean1 +std1 < score.get(i)) 
      { 
       System.out.println("A"); 
      } 
      else if((score.get(i) >= mean1+(std1/3)) && (mean1 +std1)> score.get(i)) 
      { 
       System.out.println("B"); 
      } 
      else if((score.get(i) >= mean1-(std1/3)) && (mean1 +(std1/3))> score.get(i)) 
      { 
       System.out.println("C"); 

      } 
      else if((score.get(i) >= mean1-(std1)) && (mean -(std1/3))> score.get(i)) 
      { 
       System.out.println("D"); 
      } 
      else if(mean1 - std1 > score.get(i)) 
      { 
       System.out.println("F"); 
      } 

     } 
    } 
    return lettergrade; 
} 
} 
+0

コードをフォーマットするとよいでしょうか?自動フォーマットにはIDEを使用することをお勧めします。 –

+0

いいえ私はちょうど行った – JustAJAVAGUY

+0

ありがとう、どこが間違いですか?あなたはデバッガを使いましたか? –

答えて

1

代わりに、私のプログラムは、制御されていないループに入り、 []で終わります。どうすればこの問題を解決できますか?

「レターグレード」配列を実際に変更していないため、空の[]が表示されています。実際にアレイに追加するのではなく、グレードをコンソールに印刷するだけです。 sysoutステートメントの代わりに、またはsysoutステートメントの他に、グレーディングを配列に追加する必要があります。例えば。

lettergrade.add("B");

+0

私は[F、C、A、F、F、C、A、F、C、F、C、A、F、C、A]を取得しようとしたとき – JustAJAVAGUY

+0

@JustAJAVAGUY、あなたの入力は何ですか?期待される出力? – VHS

+0

名前1スコア1 名前2スコア2 名前3スコア3 txtファイルからのmyinputと私の出力は、score1-score3に従って文字の等級を表示しなければなりません – JustAJAVAGUY

関連する問題