Scanner 看不到整数,BufferedWriter 不能写任何东西
Scanner can't see integers, BufferedWriter can't write anything
晚上好!
我需要读取一些整数并用它们做数学运算,但我的问题不在于算法。 Scanner 不会从 .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();
}
问题是您误解了要写给 fout
的内容。
BufferedWriter.write(int)
写入单个字符。
您输入的字符是0
,因为sum == 0
。现在,这不是数字零 '0'
(即 48),而是字符 '[=16=]'
,空字符,即值为零的 char
。这是一个非打印字符,因此如果您在文本编辑器中打开该文件,或者只是在命令行中 cat
它,您将看不到它。
所以您正在将它写入文件,这不是您所期望的。如果要写数字 '0'
,请使用 BufferedWriter.write(String)
:
fout.write(Integer.toString(sum));
我认为您从文本文件中获取的值被视为字符串。
您是否尝试过 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();
}
晚上好! 我需要读取一些整数并用它们做数学运算,但我的问题不在于算法。 Scanner 不会从 .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();
}
问题是您误解了要写给 fout
的内容。
BufferedWriter.write(int)
写入单个字符。
您输入的字符是0
,因为sum == 0
。现在,这不是数字零 '0'
(即 48),而是字符 '[=16=]'
,空字符,即值为零的 char
。这是一个非打印字符,因此如果您在文本编辑器中打开该文件,或者只是在命令行中 cat
它,您将看不到它。
所以您正在将它写入文件,这不是您所期望的。如果要写数字 '0'
,请使用 BufferedWriter.write(String)
:
fout.write(Integer.toString(sum));
我认为您从文本文件中获取的值被视为字符串。 您是否尝试过 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();
}