扫描仪看不到整数,BufferedWriter无法写入任何内容

时间:2017-04-16 18:18:05

标签: java java.util.scanner bufferedwriter

晚上好! 我需要阅读一些整数并用它们做数学,但我的问题不在于算法。扫描程序不从.txt读取int,而BufferedWriter也不会写入这些int。当我尝试在控制台中编写它时,结果是0.它可以是什么?

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

    Scanner fin = new Scanner(new File("aaa.in.txt"));
    BufferedWriter fout = new BufferedWriter(new FileWriter("bbb.out.txt"));
    int sum = 0;
    int k = fin.nextInt(); int n = fin.nextInt();

    for (int i = 0; i < k; i++) {
        sum += fin.nextInt() / n * fin.nextInt();
    }

    fout.write(sum);

    fin.close();
    fout.close();
}

这是我的输入

5 30
2 32
7 87
4 100
1 27
16 85

嗯,非常感谢大家,扫描仪或BufferedWriter没有任何问题。我只需要加倍,如上所述,我不明白它是如何工作的。毕竟这是我的代码。也许以后会帮助别人。

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

    Scanner fin = new Scanner(new File("aaa.in.txt"));
    BufferedWriter fout = new BufferedWriter(new FileWriter("bbb.out.txt"));
    double sum = 0;
    int k = fin.nextInt();
    int n = fin.nextInt();

    for (int i = 0; i < k; i++) {

        sum += fin.nextDouble() / n * fin.nextDouble() / 100;
    }

    fout.write(Double.toString(sum));

    fin.close();
    fout.close();
}

2 个答案:

答案 0 :(得分:4)

问题在于你误解了你写给fout的内容。

BufferedWriter.write(int)写一个字符。

您撰写的字符为0,因为sum == 0。现在,这不是数字零,'0'(将是48),它是字符'\0',空字符,即char,其值为零。这是一个非打印字符,因此如果您在文本编辑器中打开文件,或者只是在命令行上cat,则不会看到此字符。

所以你写入文件,这不是你所期望的。如果您要编写数字'0',请使用BufferedWriter.write(String)

fout.write(Integer.toString(sum));

答案 1 :(得分:0)

我认为您从文本文件中获取的值被视为字符串。 你尝试过Integer.parseInt()方法吗? 我做了一些更改,试图访问一个文件,并将所有数字的总和提供到input.txt(您的输入),它运行没有问题。 另外,在输入文件中,我只有一行整数。

public static void main(String[] args) throws FileNotFoundException, IOException 
{
    Scanner fin = new Scanner(new File("input.txt"));
    BufferedWriter fout = new BufferedWriter(new FileWriter("output.txt"));
    int sum = 0;
    while (fin.hasNext())
    {
        sum += Integer.parseInt(fin.next());
    }
   System.out.println(sum);
    fout.write(sum);
    fin.close();
    fout.close();
}