[英]Java Scanner/Array Pyramid
所以我正在努力使附加值金字塔化。 例如 第1行具有(5),第2行具有(6,7)第3行具有(12,10,7)。 目標是將第一行的最大值與下一行的最高連接子級值相加。 因此,在這種情況下,您將添加5 + 7 + 10,結果為22。之所以不能在第3行中使用12,是因為您必須使用上述數字的子代(每個父代都有2個孩子)。
我的方法是使用Scanner逐行將int值加載到數組中,並以某種方式索引上一行的最高子值的位置,以將其添加到運行總計中。 這是我到目前為止的代碼...
//在數據文件中...
5
6 7
12 10 7
//就這樣。
public static void main(String[] args) {
Scanner scanner = null;
try {
scanner = new Scanner(new File("/users/joe/desktop/data.txt"));
} catch (FileNotFoundException e) {
System.out.println("File not found.");
e.printStackTrace();
} //reads the file
int[] a = new int[100]; //establishes new array with a max size of 100
int i = 0; //placeholder for array position
int result = 0;
int total = 0;
while(scanner.hasNextLine()){ //loops through line
a[i++] = scanner.nextInt(); //adds int to array
if(i == 0){ //does this belong here?
result = a[0];
}
else{
if(a[i-1] >= a[i+1]){
result = a[i-1];
}
else if(a[i-1] <= a[i+1]){
result = a[i+1];
}
}
}
total = total + result;
scanner.close();
System.out.print(Arrays.toString(a));
System.out.println("\n" + total);
}
}
當前,它將打印出:[5,6,7,12,10,7,0,0,0,0,0,...最多100個位置]
5
如何使掃描儀讀取一行,將其加載到一個數組中,對其進行循環,並保存下一行數組中的最高子級值?
當我執行該代碼時,在讀取所有數字后會得到NoSuchElementException。 發生這種情況是因為您始終在檢查文件的下一行,但要讀下一個整數。
代碼中存在太多邏輯缺陷,因此很難一一列舉。 您可以從事以下工作:
您只需要在循環外添加合計+結果一次。 您應該將其移入循環,以便正確計算總數
您計算結果不正確。 至少,您應該有一個變量,該變量指示最高數字在最后一行的位置。 您還正在將i -1與i + 1進行比較...當您下到最后一行時,這將不起作用,因為您將比較i兩側的項目,而不是i以下的項目。
我建議將變量讀入三角形2D數組。 您可以通過為每行創建另一個掃描儀來實現。 將每一行讀入新的掃描儀; 並輪詢nextInt()。 然后,您可以比較arr [row] [pos]和arr [row] [pos + 1],它們將是arr [row-1] [pos]的子代。
一旦您可以將文件讀取到2D數組中並從數組中打印出int的外觀就像文件內容一樣,並且如果仍然遇到問題,請回來,我們可以為您提供更多幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.