我正在尝试读取文本文件,然后在另一个文件中显示输出。我只能用扫描仪阅读。input.txt
3005045 7
3245436 0
7543536 3
8684383 -1
output.txt应该像
ID Number of Bags Total Cost
** ************** **********
顾客支付20.50每袋如果袋是4或更少。如果袋子大于4,每袋支付15.50美元。但如果是0或负数,这个消息应该出现"错误:错误的袋子数量"。我执行了这个程序,但它只工作一次(只读取一行)
import java.util.*;
import java.io.*;
import java.io.IOException;
public class Bags {
public static void main(String []args) throws IOException {
FileInputStream fileinput = new FileInputStream("input.txt");
FileOutputStream fileoutput = new FileOutputStream("output.txt");
Scanner infile = new Scanner(fileinput);
PrintWriter pw = new PrintWriter(fileoutput);
double total = 0, line = 0;
int bags = 0, ID = 0, count = 0;
pw.println("IDttNumber of BagstttTotal Cost");
for(int i = bags; i >= 0; i++, count++){
ID = infile.nextInt();
i = infile.nextInt();
if (i <= 0){
pw.println(ID + "tError: Wrong Number of Bagsttt");
break;
}
else if (i <= 4){
total = (80.50)*i;
pw.printf("%dtt%dtttt%.2f", ID, i, total);
break;
}
else {
total = ((80.50)*4)+((75.50)*(i-4));
pw.printf("%dtt%dtttt%.2f", ID, i, total);
break;
}
}
infile.close();
pw.close();
}
}
你不需要那个for循环。同时,你需要逐行阅读。下面是您的代码的快速修复:
public class Bags {
public static void main(String[] args) throws IOException {
FileInputStream fileinput = new FileInputStream("input.txt");
FileOutputStream fileoutput = new FileOutputStream("output.txt");
Scanner infile = new Scanner(fileinput);
PrintWriter pw = new PrintWriter(fileoutput);
double total = 0, line = 0;
int bags = 0, ID = 0, count = 0;
pw.println("IDttNumber of BagstttTotal Cost");
while(infile.hasNext()){
ID = infile.nextInt();
int i = infile.nextInt();
if (i <= 0) {
pw.println(ID + "nttError: Wrong Number of Bagsttt");
} else if (i <= 4) {
total = (80.50) * i;
pw.printf("%dtt%dtttt%.2f", ID, i, total);
} else {
total = ((80.50) * 4) + ((75.50) * (i - 4));
pw.printf("%dtt%dtttt%.2f", ID, i, total);
}
}
infile.close();
pw.close();
}
}
Output.txt
ID Number of Bags Total Cost
3005045 7 548.503245436
Error: Wrong Number of Bags
7543536 3 241.508684383
Error: Wrong Number of Bags
您不应该使用i
来保存"number of bags"。看i = infile.nextInt();
这行。使用另一个变量,应该没问题。此外,你应该一直读到文件结束,所以你可能不能写一个for (int i = 0; i < n; i++)
风格的循环。
毫无疑问,循环只能迭代一次。在每种情况下都有break
。
在这种情况下,你也不应该使用for
循环,尤其是你现在使用它的方式。只要看看它,你的循环只会在这个条件i >= 0
为假时结束,这意味着i
必须是负的,但即使i
将成为-1
,像你输入的最后一个数字,它仍然会在迭代结束时增加,这要归功于i++
,所以你最终会得到0 >= 0
条件为真,所以循环会尝试再次迭代)
用
代替while(scanner.hasNextInt())
这样,您将确保仅在有下一个要读取的文件时才从文件中读取int
。只需使用预定义的bugs
变量而不是i
。
另一件事是你没有在printf
格式中包括行分隔符。在每个数字的末尾添加%n
,不要使用t
,但要指定每个数字的空间,如
pw.printf("%d %9d %40.2f%n",...);