2011-12-14 12 views
0

2つの配列を比較して、他の配列の同じインデックスを持つ基本的な計算をしようとしています。私は正しい答えを受け取っていないし、配列が正しく比較されていないためだと思う。ここに私のコードである:配列STD2がSTD1同じレコードの倍数と9つの数値レコード(重複)を含むが特定のインデックスを比較すると、配列ループが機能しない

y = 0; 
    for (x=0; x<std1.length; x++){ 
     if (std1[x]==std2[y]){ 
      sumhrs[x] += hrs[y]; 
      mult[x] = hrs[y] * ngrd[y]; 
      hold[x] = hold[x] + mult[x]; 
      gpa[x] = hold[x]/sumhrs[x]; 
      y++; 
     } 
    } 

アレイSTD1 4つの数値レコードを含みます。他の配列(hrs、ngrdなど)は、配列std2に順番にレコードが含まれているため、同じ変数[y]にリンクされています。

 
    Here is the current output: 
    205 Smart 4.0 A 
    400 Brent 0.0 NONE 
    155 Brown 0.0 NONE 
    150 Canon 0.0 NONE 
これは宿題であり、私はこれを理解しようと多くの時間を費やしましたが、できません。この宿題の最終結果は、名前と成績の情報を持つ2つの学生ファイルからGPAを計算することです。私はファイルを配列に追加し、配列を特定のフォーマット(int、double、string)のユニークな配列に分割しましたが、GPAを計算している間はインデックスの精度を維持するためにすべての重複を保持しました。つまり、配列std2 [5]とhrs [5]は、インデックス[5]に1つの結合配列があったときと同じデータを保持していました。

ご協力いただければ幸いです。

おかげ

***編集:

私は私の完全なコードを追加するつもりだと私はここから引っ張ってる二つのファイル:

 
    File 1tab delimited 
    205 Smart 
    400 Brent 
    155 Brown 
    150 Canon 
 
    File 2tab delimited 
    205 1 4.0 
    205 3 2.8 
    205 4 4.0 
    205 3 2.3 
    400 3 3.5 
    155 2 2.7 
    150 3 3.0 
    150 3 4.0 
    150 3 2.7 

public static void main(String[] args) throws IOException { 
    FileInputStream in1 = new FileInputStream("c:/users/da/desktop/" 
      + "file1.txt"); 
    BufferedReader br1 = new BufferedReader(new InputStreamReader(in1)); 
    FileInputStream in2 = new FileInputStream("c:/users/da/desktop/file2.txt"); 
    BufferedReader br2 = new BufferedReader(new InputStreamReader(in2)); 

    String[] file1array = new String[4]; 
    String[] file2array = new String[9]; 

    for (int j = 0; j < file1array.length; j++){ 
     file1array[j] = br1.readLine();} 
    for (int j = 0; j < file2array.length; j++){ 
     file2array[j] = br2.readLine();} 

    int i = 0; 
    int j = 0; 
    int x = 0; 
    int y = 0; 
    int index = 00; 

    int[] std1 = new int [file1array.length]; 
    String[] name = new String [file1array.length]; 

    int[] std2 = new int [file2array.length]; 
    int[] hrs = new int [file2array.length]; 
    double[] ngrd = new double [file2array.length]; 
    double[] mult = new double [file2array.length]; 
    double[] sumhrs = new double [file1array.length]; 
    double[] hold = new double [file2array.length]; 

    double[] gpa = new double [file1array.length]; 
    String[] lgrd = new String [file1array.length]; 

    String line1 = ""; 
    String[] data1; 
    String line2 = ""; 
    String[] data2; 

    for (x=0; x<file1array.length; x++){ 
      line1 = file1array[x]; 
      data1 = line1.split("\t"); 
      std1[x] = Integer.parseInt(data1[0]); 
      name[x] = data1[1];} 

    for (x=0; x<file2array.length; x++){ 
      line2 = file2array[x]; 
      data2 = line2.split("\t"); 
      std2[x] = Integer.parseInt(data2[0]); 
      hrs[x] = Integer.parseInt(data2[1]); 
      ngrd[x] = Double.parseDouble(data2[2]);} 

    y = 0; 
    for (x=0; x<std1.length; x++){ 
     if (std1[x]==std2[y]){ 
      sumhrs[x] += hrs[y]; 
      mult[x] = hrs[y] * ngrd[y]; 
      hold[x] = hold[x] + mult[x]; 
      gpa[x] = hold[x]/sumhrs[x]; 
      y++; 
     } 
    } 

    for (x=0; x<gpa.length; x++){ 
     if (gpa[x] <= 4.0){ 
      lgrd[x] = "A";} 
     if (gpa[x] < 3.4){ 
      lgrd[x] = "B";} 
     if (gpa[x] < 3.7){ 
      lgrd[x] = "C";} 
     if (gpa[x] < 2.0){ 
      lgrd[x] = "D";} 
     if (gpa[x] < 1.3){ 
      lgrd[x] = "F";} 
     if (gpa[x] < 0.1){ 
      lgrd[x] = "NONE";} 
    } 

    System.out.println ("   STUDENT REPORT"); 
    System.out.println (""); 
    System.out.println ("STUDENT STUDENT GPA GRADE"); 
    System.out.println (" NUMBER NAME"); 
    for (x=0; x<gpa.length; x++) 
     System.out.println (" " + std1[x] + " " + name[x] + "  " + gpa[x] + 
       " " +lgrd[x]); 
} 

}

答えて

1

y++はの外にあるはずですステートメント、その内部にはありません。

それが現在であるため、xがforループを通過するたびにインクリメントされますが、それはどのような各列を参照するのは簡単ですのでstd1[x] == std2[y]

+1

なぜ....あなたはあなたがいないことを意味します! –

+0

私はあなたが言うことを意味すると思うが、「yは増分するだけだ...」良いキャッチ。 +1 –

+0

Argh - はい - ありがとう! :-) – Shaun

0

あなたは、出力のために使用しているコードを追加することができます場合は、yだけ増分されます?

これ以外にも、配列yのすべてをカバーしていないことが問題だと思います。あなたはxの長さにループしています。もしあなたが好きであれば、yに重複があります。あなたが決して考慮していないレコードがあるかもしれません。あなたはこれらの配列があった場合:

x = 1, 2, 3, 4, 5 
y = 1, 2, 1, 2, 3, 3, 4, 5 

をループがそれらを含めることはないとして、その後の数字45のために計算された値は0になります。

yの重複を扱うためのコードがありますが、期待通りに動作しません。std2std1[x]を検索する内側のループがあなたを助けます。

+0

ありがとう、私は使用している完全なコードとサンプルファイルを追加しました。私はそれがたくさんあることを知っていますが、私はあなたが私に与えることができるコメントを感謝します。私はこれを次の2〜3時間働いて、次に私が持っているものを入れなければならないでしょう。 – INGUES

関連する問題