我一直在嘗試整天鍛鍊這個excersise,但沒有任何運氣。預先感謝您的幫助。Java讀取.txt文件到數組
這裏的問題
你要實現的方法是將每個整數存儲在數字陣列 ,每個數組元素一個數字。我們將使用長度爲50的數組 ,所以我們將能夠存儲多達50個數字的整數 長。我們必須小心如何存儲這些數字。例如,考慮 ,例如存儲數字38423和27.如果我們在 處存儲這些數組的「前面」,並且該數組的索引0中的每個數字的前導數字,那麼當我們將這些數字相加時, 我們可能會添加它們是這樣的:
爲了模擬值的這種向右移位,我們將每個值存儲爲 的整整50位的序列,但我們將允許號碼有 前導0。例如,上面的問題轉化爲:
現在列正確對齊,我們有足夠的空間在 前的情況下,我們甚至更長的號碼添加到這些。
程序的數據將被存儲在一個名爲sum.txt的文件中。 對於您要解決的問題,輸入文件的每一行都會有不同的添加問題。每行將有一個或多個整數加起來 。在這篇文章末尾看看輸入文件 和你應該產生的輸出。請注意,您爲每條輸入行生成一行 輸出行,顯示您在 正在解決的添加問題及其答案。您的輸出還應該在 末端指示處理了多少行輸入。您必須完全重現 此輸出。
您應該使用第6章中描述的技術來打開一個文件, 逐行讀取它,並處理每行的內容。在讀取這些數字的 中,您將無法將它們讀取爲整數或長整數 ,因爲它們中的很多都太大而無法以int或long存儲。所以 你必須使用方法 next()調用字符串值來讀取它們。那麼你的第一個任務就是將一串數字 轉換成一個50位數的數組。如上所述,您需要將 號碼向右移動,並在前面加上前導0。字符串 方法charAt和方法Character.getNumericValue將有助於 解決這部分問題。
您將要添加每行數字,這意味着您將有 編寫一些代碼,允許您將這兩個 數字相加或將其中一個添加到另一個。這是你在小學所學的東西,從右邊開始加上,保持 跟蹤是否有一個數字從一列到 。您的挑戰在於採取一個您熟悉的過程 ,並編寫執行相應任務的代碼。
你的程序也必須寫出這些數字。這樣做,它應該 不打印任何前導0。儘管 號碼在內部以前導0存儲是方便的,但讀取輸出的人將會看到 而不是任何前導0。
您可以假設輸入文件的數字有50個或更少的 數字,答案總是50位或更少。但是,請注意,您必須處理個人可能爲0或答案可能爲0的可能性。輸入文件中不會有負數 整數。
你應該使用長度恰好爲50位數字的數組來解決這個問題 長。某些錯誤可以通過將數組拉伸到像51位數字那樣的 來解決,但不應該這樣做,如果數組需要超過50位數字,則 會丟失樣式點。
的50位數的選擇是任意的(一個神奇的 數),所以你應該引入一個類常量您使用 貫穿,將可以很容易地修改代碼以 不同數量的操作數字。
將輸入文件看作是您的程序必須解決的問題類型的示例。我們可能會使用更復雜的輸入文件來進行實際的 分級。
Java類庫包含名爲BigInteger的類和使用類似於我們要求在此程序中實現的 的策略的BigDecimal。您無權使用BigInteger或BigDecimal解決此問題 。您必須使用數字 數組解決它。
您的程序應該存儲在名爲Sum.java的文件中。
輸入文件sum.txt
82384
204 435
22 31 12
999 483
28350 28345 39823 95689 234856 3482 55328 934803
7849323789 22398496 8940 32489 859320
729348690234239 542890432323 534322343298
3948692348692348693486235 5834938349234856234863423
999999999999999999999999 432432 58903 34
82934 49802390432 8554389 4789432789 0 48372934287
0
0 0 0
7482343 0 4879023 0 8943242
3333333333 4723 3333333333 6642 3333333333
輸出應該產生
82384 = 82384
204 + 435 = 639
22 + 31 + 12 = 65
999 + 483 = 1482
28350 + 28345 + 39823 + 95689 + 234856 + 3482 + 55328 + 934803 = 1420676
7849323789 + 22398496 + 8940 + 32489 + 859320 = 7872623034
729348690234239 + 542890432323 + 534322343298 = 730425903009860
3948692348692348693486235 + 5834938349234856234863423 = 9783630697927204928349658
999999999999999999999999 + 432432 + 58903 + 34 = 1000000000000000000491368
82934 + 49802390432 + 8554389 + 4789432789 + 0 + 48372934287 = 102973394831
0 = 0
0 + 0 + 0 = 0
7482343 + 0 + 4879023 + 0 + 8943242 = 21304608
3333333333 + 4723 + 3333333333 + 6642 + 3333333333 = 10000011364
總線= 14
我的代碼迄今
public class Sum {
public static void main(String args[]) throws FileNotFoundException{
File file = new File("sum.txt");
Scanner scanner = new Scanner(file);
String[] myInts = new String[50];
int mySpot = 0;
while(scanner.hasNext()){
myInts[mySpot] = scanner.next();
mySpot++;
}
for(int i = 0; i < myInts.length; i++){
}
System.out.println(Character.getNumericValue(myInts[0]));
System.out.println(Arrays.toString(myInts));
}
}
你需要壓縮你的問題。人們會在沒有閱讀任何信息的情況下downvote – Sajidkhan 2014-11-21 01:26:42
所有這些對於任務來說都很重要。 – SquidSquad 2014-11-21 01:28:06
你的程序是否按照你期望的那樣做?程序運行時你認爲應該發生什麼?究竟發生了什麼?你爲什麼這麼認爲?從這個分析開始,然後讓你的問題更加精確。這樣,沒有人爲你工作就更容易得到答案。我建議你將問題分解爲一些非常簡單的問題,例如逐行讀入文本文件。首先解決。 – 2014-11-21 01:28:50