2016-02-21 160 views
3

我是一個新的編碼器,最近我的班級學習了數組。我一整天都在爲這一項計劃任務着想。這不是因爲幾天,但我對此感到非常沮喪。按順序打印數組

我們必須打印出測試成績列表以及與其相關的相關ID。我們必須將測試分數從最高到最低排序,但不需要修改數組 - 所以沒有數組排序或任何類似的。 「建議的解決方案」說:

  1. 找到最大的得分,跟蹤其下標。

  2. 打印此分數以及相應的ID。

  3. 將該分數設置爲與其相反(這使其成爲最小的 分數!)。

  4. 重複步驟1-3,直到所有21分數都得到處理。

  5. 停止並打印適當的消息。

我一直在試圖遵守這些說明,因爲還有其他程序在本週的其餘時間將依賴於此。但是,我的方法有缺陷,因爲我的代碼打印最高分數爲110,238,26次迭代。 我在使用這段代碼時遇到了很多麻煩,這讓我非常沮喪。這是我到目前爲止:

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

public class Prog408a { 

    static Scanner inFile = null; 
    static Scanner inFile2 = null; 

    public static void main (String[]args) { 

     try { 

      // create scanner to read file 
      inFile = new Scanner(new File ("prog408a.dat")); 

     } catch (FileNotFoundException e) { 
      System.out.println("File not found!"); 
      System.exit(0); 
     } 

     int [] ids = new int[26]; 
     int [] scores = new int[26]; 

     int first = 0; 
     int second = 0; 

     int counter = 0; 

     int max, maxid, supermax; 

     do { 

      ids [first] = inFile.nextInt(); 
      scores [second] = inFile.nextInt(); 

      first++; 
      second++; 

     } while (inFile.hasNextInt()); 


     /* initial values of max, maxid */ 



     System.out.println("ID\t\tScore"); 

     maxid = ids[0]; 
     supermax = scores[0]; 
     max = scores[0]; 
     int index=0; 

     while (counter < scores.length) { 

      for (int x = 0; x < scores.length - 1; x++) { // scroll through the indexes. 

       if (scores[x] > max) { 

        max = scores[x]; 
        index = x; // keep the index of the biggest number. 

       } 

       max = -1 * (scores[index]); 

      } 

      System.out.println("The maximum score is " + ids[index] + ", " + scores[index]); 
      counter++; 



     } 




    } 

} 

這是什麼在數據文件中。

365 265 
222 223 
306 262 
003 559 
004 560 
203 224 
113 243 
208 242 
213 229 
115 257 
302 242 
223 230 
001 599 
311 256 
323 245 
321 245 
123 253 
104 239 
002 513 
112 239 
207 228 
325 246 
116 246 
218 243 
110 238 

對不起,如果在帖子中有任何格式錯誤。

回答

2
while (counter < scores.length - 1) { 
     for (int x = 0; x < scores.length - 1; x++) { // scroll through the indexes. 
      if (scores[x] > max) { 
       max = scores[x]; 
       index = x; // keep the index of the biggest number. 
      } 
     } 
     System.out.println("The maximum score is " + ids[index] + ", " + scores[index]); 
     max = -1 * (scores[index]); 
     scores[index] = -1 * (scores[index]); // change the value in the original array so it won't find the same max again 
     counter++; 
} 

輸出:

ID  Score 
The maximum score is 1, 599 
The maximum score is 4, 560 
The maximum score is 3, 559 
The maximum score is 2, 513 
The maximum score is 365, 265 
The maximum score is 306, 262 
The maximum score is 115, 257 
The maximum score is 311, 256 
The maximum score is 123, 253 
The maximum score is 325, 246 
The maximum score is 116, 246 
The maximum score is 323, 245 
The maximum score is 321, 245 
The maximum score is 113, 243 
The maximum score is 218, 243 
The maximum score is 208, 242 
The maximum score is 302, 242 
The maximum score is 104, 239 
The maximum score is 112, 239 
The maximum score is 110, 238 
The maximum score is 223, 230 
The maximum score is 213, 229 
The maximum score is 207, 228 
The maximum score is 203, 224 
The maximum score is 222, 223 

你可能要添加一個小功能,將與在啓動額外的零打印id < 100

+0

謝謝你的回覆。但是,在編輯我的代碼時,輸​​出會重複打印1,599和1,-599,直到while循環結束。我不知道這是爲什麼。 – Nikolas

+0

對不起,我不檢查我的解決方案。我已修好它,它現在會工作。 –

+0

謝謝,這個作品完美。你能解釋一下你是如何發現這個錯誤的嗎?這個程序對我來說太令人沮喪了。 – Nikolas