为什么我的ArrayList为空?

时间:2015-01-25 02:19:17

标签: java arraylist java.util.scanner

我正在研究Project Euler问题13.(https://projecteuler.net/problem=13)文件“Large_Num_List.txt”是项目Euler提供的列表,每个数字都在自己的行上,在开头和结尾都有引号每一行。语句bial.isEmpty()返回true。为什么会这样? (我怀疑是因为这是我第一次使用Scanner读取文本文件。)

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
import java.math.BigInteger;
import java.util.Iterator;

public class LargeSumTwo
{
  public static void main(String[] args)
  {

    ArrayList<BigInteger> bial = new ArrayList<BigInteger>();
    File file = new File("Large_Num_List.txt");

    try 
    {

        Scanner scan = new Scanner(file);

        while(scan.hasNextBigInteger()) 
        {
            bial.add((BigInteger) scan.nextBigInteger());
        }
        scan.close();
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }

    System.out.println(bial.isEmpty());
    BigInteger answer = new BigInteger("0");
    Iterator<BigInteger> iter = bial.iterator();

    while(iter.hasNext())
    {
      answer.add(iter.next());
    }

    System.out.println(answer);
  }
}

2 个答案:

答案 0 :(得分:1)

您需要先删除引号。如果hasNextBigInteger()可以解析true,则Scanner只会返回BigInteger。数字周围的引号会导致hasNextBigInteger()返回false

JavaDoc:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextBigInteger%28%29

答案 1 :(得分:1)

你应该以这种方式添加BigInteger:

while(iter.hasNext())
{
  answer = answer.add(iter.next());
}

因为BigDecimal数字是不可变的吗?