2015-09-08 24 views
1

我試圖從用戶那裏接受輸入,然後如果它匹配現有文件之一,請閱讀文件並將文字,字母或數字放入數組中。 「文字」和「字母」文件似乎工作正常,但「數字」給我一個問題。它找到文件,讀取它,將其放入一個數組中,並給出數字的總和;然而,數組的輸出是所有其他數字,而不是所有數字,就像它應該做的那樣。將文件讀入數組返回錯誤的元素

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

public class fileIO 
{ 
    public static void main (String[] args) throws FileNotFoundException 
    { 
     String filename; 
     System.out.println("Please enter name of file (alphabet,words,numbers): "); 
     Scanner input = new Scanner(System.in); 
     filename = input.nextLine(); 


     if(filename.equals("numbers")) 
     { 
      int sum = 0; 
      Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt")); 
      ArrayList<Integer> arr = new ArrayList<Integer>(); 
      while(reader.hasNext()) 
      { 
       arr.add(reader.nextInt()); 
       sum = sum + reader.nextInt(); 
      } 
      System.out.println(arr); 
      System.out.println("The summation is: " + sum); 
      reader.close(); 
     } 

     else if(filename.equals("words") || filename.equals("alphabet")) 
     { 
      Scanner reader = new Scanner(new File("/home/ninjew/workspace/FileIO/src/" + filename + ".txt")); 
      // This is for words and letters within the file. Print words and letters. 
      ArrayList<String> arr = new ArrayList<String>(); 

      while(reader.hasNext()) 
      { 
       String line = reader.next(); 

       Scanner scanner = new Scanner(line); 
       scanner.useDelimiter(","); 
       while(scanner.hasNext()){ 
        arr.add(scanner.next()); 
       } 
       scanner.close(); 
      } 
      System.out.println(arr); 
      reader.close(); 

     } 
    } 
} 

回答

4

if(filename.equals("numbers"))你正在做兩件在此塊文件讀取,這就是爲什麼它被跳過數

 while(reader.hasNext()) 
     { 
      arr.add(reader.nextInt()); 
      sum = sum + reader.nextInt(); 
     } 

應該

 while(reader.hasNext()) 
     { 
      int val = reader.nextInt(); 
      arr.add(val); 
      sum = sum + val; 
     } 
+0

這工作完美。感謝您爲我清理! – Tangwheeler

1

您的數字閱讀器迴路增加數組的第一個數字和總數的下一個數字。

如果輸入是1 2 3 4 5 6,您的陣列是[1, 3, 5]和你的總和爲2 + 4 + 6 = 12。

1

您正在閱讀接下來的兩個整數一氣呵成。每次你撥打scanner.nextInt()它都會讀取下一個int。你需要將nextInt存儲在一個臨時變量中,並在兩個地方使用它。

while(reader.hasNext()) 
      { 
       int next = reader.nextInt(); 
       arr.add(next); 
       sum = sum + next; 
      }