将整数打印到新行直到特定点

时间:2018-12-09 01:26:31

标签: java

假设我有一个与此相关的文本文件:

2 4 6 7 -999
9 9 9 9 -999

运行程序时,我应该在每行上打印除“ -999”以外的所有内容。我应该得到的是:

 2 4 6 7 
 9 9 9 9 

这是我尝试过的:

public class Prac {
public static void main(String[] args) throws FileNotFoundException {

    Scanner reader = new Scanner(new File("test.txt"));
    while(reader.hasNextLine() && reader.nextInt() != -999) {
        int nextInt = reader.nextInt();
        System.out.print(nextInt + " ");
    }

}

}

我已经尝试过使用while / for循环,但是似乎没有使它起作用,并且数字不在不同的行上。我不明白为什么在运行代码时条件不起作用并且打印时每一行都没有分开。我已经尝试寻找解决方案一段时间了,并决定在这里询问。这可能是一个简单的问题,但是我已经有一段时间没有编码了,所以让我知道。提前致谢。

4 个答案:

答案 0 :(得分:3)

reader.nextInt()中的while将使用下一个整数,因此您将始终跳过整数。所以我建议:

    public static void main(String[] args) throws FileNotFoundException {
        Scanner reader = new Scanner(new File("test.txt"));
        while (reader.hasNextLine()) {
            int nextInt = reader.nextInt();
            if (nextInt != -999)
                System.out.print(nextInt + " ");
            else
                System.out.println();
        }
    }

更新:如果您要按照注释中的要求计算每行的平均值,则可以存储每个值以进行计算(请参见here其他方法)。下面的代码将执行此操作,并在行末打印平均值:

    public static void main(String[] args) throws FileNotFoundException {
        Scanner reader = new Scanner(new File("test.txt"));
        List<Integer> values = new ArrayList<>();
        while (reader.hasNextLine()) {
            int nextInt = reader.nextInt();
            if (nextInt != -999) {
                System.out.print(nextInt + " ");
                values.add(nextInt);
            } else {
                int sum = 0;
                for (int value : values) {
                    sum += value;
                }
                System.out.println((float) sum / values.size());
                values.clear();
            }
        }
    }

答案 1 :(得分:2)

尝试一下。

public static void main(String[] args) throws FileNotFoundException {

    Scanner reader = new Scanner(new File("./input.txt"));
    while (reader.hasNextInt()) {
        int nextInt = reader.nextInt();
        if (nextInt != -999) {
            System.out.print(nextInt + " ");
        } else {
            if (reader.hasNextLine()) {
                System.out.println("");
            }
        }
    }

}

答案 2 :(得分:2)

问题是您没有在while循环中保存reader.nextInt()中的值。 您可以尝试以下方法:

while (reader.hasNextLine()) {
    int nextInt = reader.nextInt();
    System.out.print( nextInt != -999 ? nextInt + " " : "\n");
}

答案 3 :(得分:2)

我参加聚会很晚...但是只要其他人在您接受之后回答,我以为我会分享我开始写的回复...但是太慢了,无法在其他两个人之前发回(好极了!)。

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

public class Prac {

    static final int EOL = -999;

    public static void main(String[] args) throws FileNotFoundException {
        File f = new File("test.txt");
        try (Scanner reader = new Scanner(f)) {
            int nextInt;
            while(reader.hasNext()) {
                if ((nextInt = reader.nextInt()) == EOL)
                    System.out.println();
                else
                    System.out.print(nextInt + " ");
            }
        }
    }
}

注意: 1.主要问题是您没有在while循环中捕获“ scanner.nextInt()”的值。因此,您跳过了所有其他值。

  1. 还有一个资源泄漏-您没有关闭扫描仪。像这样的小程序没关系(退出程序将关闭文件就好了;)。

    一种方法是执行显式的“ close()”。

    上面说明的另一种选择是Java 8中引入的try-with-resources statement