使用扫描程序和数组添加BigInts

时间:2018-03-01 08:05:02

标签: java java.util.scanner

这是一个来自学校的项目,但我只是在其中一小部分的逻辑上寻求帮助。我得到了大部分的结果。

我正在获得一个包含字符串整数行的文件,例如:

1234  123
12 153 23
1234

我要读取每一行,计算总和,然后转到下一行来产生这个:

1357
188
1234

我卡在扫描仪部件上。

public static void doTheThing(Scanner input) {

    int[] result = new int[MAX_DIGITS];
    while(input.hasNextLine()) {

        String line = input.nextLine();
        Scanner linesc = new Scanner(line);

        while(linesc.hasNext()) {
            String currentLine = linesc.next();
            int[] currentArray = convertArray(stringToArray(currentLine));
            result = addInt(result, currentArray);
        }
        result = new int[MAX_DIGITS];

    }


}

简而言之,我想抓住每个大整数,把它放在一个数组中,添加它们,然后我会做其余的。

这是做什么的基本上读取所有行并添加所有内容并将其放入单个数组中。

我坚持的是如何读取每一行,添加,将值重置为0,然后读取下一行?我已经在这里待了好几个小时了,我心里难过。

编辑01:我现在意识到我应该使用另一台扫描仪来读取每一行,但现在我收到一个看似无限循环的错误?

编辑02:好的,经过更多提示和建议,我已经超过了这个错误,但现在它正在完成原始问题。

最终编辑:嘿......修好了。我忘记将值重置为" 0"在打印每个值之前。因此,添加所有值是有意义的。

Yay ....编码很有趣....

4 个答案:

答案 0 :(得分:0)

更简单的方法是完全放弃Scanner,让java.nio.io.Files为您阅读,然后处理每一行:

Files.lines(Paths.get("/path/to/my/file.txt"))
     .map(s -> Arrays.stream(s.split("\\s+")).mapToInt(Integer::parseInt).sum())
     .forEach(System.out::println);

答案 1 :(得分:0)

如果我是你,我将使用像这样的扫描仪的BufferedReader:

BufferedReader br = new BufferedReader(new FileReader("path"));
    String line = "";
    while((line = br.readLine()) != null)
    {
        int sum = 0;
        String[] arr = line.split(" ");
        for(String num : arr)
        {
            sum += Integer.parseInt(num);
        }
        System.out.println(sum);
    }

答案 2 :(得分:0)

Scanner类的

hasNext方法可用于检查流中是否有可用的数据。因此,next方法用于检索没有空白字符的下一个连续字符序列。这里使用hasNext方法作为条件,如果没有任何意义,你想要的是检查当前行中是否还有任何数字数据。您可以使用next(String pattern)

此外,即使它不是最佳解决方案,您也可以尝试使用此解决方案......

// In a loop
String line = input.nextLine(); //return entire line & descard newline character.
String naw[] = line.split(" "); //split line into sub strings.
/*naw contains numbers of the current line in form of string array.
Now you can perfom your logic after converting string to int.*/

我还想提一下,它可以很容易地和使用java-8流有效地完成。

答案 3 :(得分:0)

考虑到你所处的水平,我认为你应该考虑这个解决方案。通过仅使用扫描程序,您可以将行拆分为一个标记数组,然后通过解析它们并验证它们是否为空而对标记进行迭代和求和。

import java.util.*;

class SumLines {
    public static void main(String[] args) {
        Scanner S = new Scanner(System.in);
        while(S.hasNext()) {
            String[] tokens = S.nextLine().split(" ");
            int sum = 0;
            for(int i = 0; i < tokens.length; i++) {
                if(!tokens[i].equals("")) sum += Integer.parseInt(tokens[i]);
            }
            System.out.println(sum);
        }   
    }
}

Running the class: