将一行中的所有整数扫描到ArrayList中

时间:2014-11-23 05:59:18

标签: java arraylist java.util.scanner

我正在尝试从txt文件中扫描一行整数,并将它们存储在ArrayList中。我的问题很简单,我该怎么做?

这就是我所拥有的

public static void main(String[] args) throws FileNotFoundException {
    ArrayList<Integer> coinTypes = new ArrayList<Integer>();
    Integer i ;
    File f = new File (args[0]);
    Scanner input = new Scanner(f);
       i = input.nextInt() ;
       input.nextLine();
       while(input.hasNextInt()) {
            if(input.hasNextLine()) {
               coinTypes.add(i);
            }
            if(input.hasNextLine()) {
               change = input.nextInt();
                System.out.println("Found change"); //used for debugging
                System.out.println("Change: " + change);
            }
       }
    System.out.println(coinTypes);
    }
}

为什么我没有工作?

INPUT

java homework5 hwk5sample1.txt

输出

Found change
Change: 143
[1]

Txt档案:

// Coins available in the USA, given in cents.  Change for $1.43?
1 5 10 25 50 100
143

WANT

Change: 143
[1, 5, 10, 25, 50, 100]

2 个答案:

答案 0 :(得分:0)

我会打开文件,读取第一行并将其拆分。

    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
      try {
          String[] numbers_= br.readLine().split(" ");
          int[] numbers = new int[numbers_.length]; //I don't remember if this could be done.
          for(int i = 0; i < numbers.length; i++) {
             numbers[i] = Integer.parseInt( numbers_[i] );
          }
      }
      finally {
        br.close();
      }

我觉得这样的事情应该起作用=)

答案 1 :(得分:0)

您的代码中存在不同的问题

if(input.hasNextLine()) {
    coinTypes.add(i);
}

由于您在if之前检查

,因此不需要while

主要问题是你没有读取循环内的输入,即

i = input.nextInt() ;

这应该在while循环中。

最后,您的change不应该放在该循环中,因为更改是单个值。如果保留它,每次循环迭代时都会读取循环更改。但如果你把它放在循环之外,就会出现另一个问题。即,在阅读硬币到change后,也会读取coinTypes

解决方案

input.nextLine();
while (input.hasNextInt()) {
    i = input.nextInt();
    coinTypes.add(i);
}
int change = coinTypes.get(coinTypes.size()-1);
coinTypes.remove(coinTypes.size() - 1);
System.out.println("Change: " + change);
System.out.println(coinTypes);

循环coinTypes之后将更改作为最后一项。我删除了最后一项,并使用这些行保留change中的最后一项。

int change = coinTypes.get(coinTypes.size()-1);
coinTypes.remove(coinTypes.size() - 1);

替代解决方案

ArrayList<Integer> coinTypes = new ArrayList<Integer>();
Integer i;
File f = new File(args[0]);
Scanner input = new Scanner(f);

input.nextLine();
int change;
String[] coinsline = input.nextLine().split("\\s");
for(String coin: coinsline) {
    coinTypes.add(Integer.parseInt(coin));
}
change = Integer.parseInt(input.nextLine());
System.out.println("change: " + change);
System.out.println(coinTypes);