使用 PrintWriter 时出错
Error when using PrintWriter
我正在尝试编写一个程序,提示用户输入速度和时间。之后我需要计算 distance = velocity * time
。如果用户输入的时间小于零且大于时间,那么我需要重新提示用户。
Hour Distance Travelled
===========================
1 40
2 80
3 120
例如,如果用户将时间输入为 5,则 table 应类似于以下内容:
Hour Distance Travelled
===========================
1 40
2 80
3 120
4 160
5 200
我需要像上面那样的 table,但我需要将 table 输出到文本文件。
这是我的代码:
import java.io.*;
import java.util.Scanner;
public class Lab4 {
public static void main(String[] args) throws IOException {
double distance;
double velocity;
double time;
System.out.println("enter the velocity and time");
Scanner sn = new Scanner(System.in);
velocity = sn.nextDouble();
time = sn.nextDouble();
do {
System.out.print(" Time cannot be smaller than zero and larger than ten");
System.out.print("Please enter again");
time = sn.nextDouble();
} while(time < 0 && time > 10);
System.out.print("please enter the file name");
String filename = sn.nextLine();
PrintWriter outputFile = new PrintWriter(filename);
distance = velocity*time;
outputFile.println(distance);
}
}
问题 1 为什么会出现此错误:
PrintWriter outputFile = new PrintWriter(filename);
^
bad source file: .\PrintWriter.java
file does not contain class PrintWriter
Please remove or make sure it appears in the correct subdirectory of the sourcepath.
问题2:如何绘制该文件?
你的代码有很多问题,aleb2000 已经提到了一个大问题(采纳 aleb2000 的建议),但我们只会讨论你的问题最终是关于,这就是您收到的错误。
您收到此错误是因为您提供的输出文件名实际上是一个 Scanner newline 字符,而 PrintWriter 不知道是什么这样做。这不是它识别为有效路径和文件名的东西。
为什么您提供的文件名不正确?好吧,这实际上很简单,在使用 nextInt()、nextDouble() 方法或任何需要提供数值的 Scanner 方法时,Scanner Class 有一个小问题,并且是当您按下键盘上的回车按钮时,您还提供了一个换行符,该换行符仍存储在扫描仪缓冲区中,并且仅在使用 Scanner.newLine() 方法时才释放,就像您在请求文件名时所做的那样待供应。换行符不会随您提供的数值一起发布,但是,当您提供文件名时,它会从缓冲区中向前拉出并取代实际为文件名键入的内容。这对你有意义吗?
幸运的是,这个问题有一个简单的解决方案,那就是在你的最后一个数字之后直接将 Scanner.newLine() 方法应用到空(无变量)输入请求,例如:
time = sn.nextDouble(); sn.nextLine();
你显然也想在 do/while 循环中执行此操作,但我认为你应该取消 do/while 并只使用这样的 while 循环(你能明白为什么吗?):
while(time < 0.0 || time > 10.0) {
System.out.println("Time cannot be smaller than zero and larger than ten!");
System.out.print("Please enter again: --> ");
time = sn.nextDouble(); sn.nextLine();
}
哦...一旦任务完成,不要关闭 PrintWriter 对象和扫描仪对象。
我正在尝试编写一个程序,提示用户输入速度和时间。之后我需要计算 distance = velocity * time
。如果用户输入的时间小于零且大于时间,那么我需要重新提示用户。
Hour Distance Travelled
===========================
1 40
2 80
3 120
例如,如果用户将时间输入为 5,则 table 应类似于以下内容:
Hour Distance Travelled
===========================
1 40
2 80
3 120
4 160
5 200
我需要像上面那样的 table,但我需要将 table 输出到文本文件。
这是我的代码:
import java.io.*;
import java.util.Scanner;
public class Lab4 {
public static void main(String[] args) throws IOException {
double distance;
double velocity;
double time;
System.out.println("enter the velocity and time");
Scanner sn = new Scanner(System.in);
velocity = sn.nextDouble();
time = sn.nextDouble();
do {
System.out.print(" Time cannot be smaller than zero and larger than ten");
System.out.print("Please enter again");
time = sn.nextDouble();
} while(time < 0 && time > 10);
System.out.print("please enter the file name");
String filename = sn.nextLine();
PrintWriter outputFile = new PrintWriter(filename);
distance = velocity*time;
outputFile.println(distance);
}
}
问题 1 为什么会出现此错误:
PrintWriter outputFile = new PrintWriter(filename);
^
bad source file: .\PrintWriter.java
file does not contain class PrintWriter
Please remove or make sure it appears in the correct subdirectory of the sourcepath.
问题2:如何绘制该文件?
你的代码有很多问题,aleb2000 已经提到了一个大问题(采纳 aleb2000 的建议),但我们只会讨论你的问题最终是关于,这就是您收到的错误。
您收到此错误是因为您提供的输出文件名实际上是一个 Scanner newline 字符,而 PrintWriter 不知道是什么这样做。这不是它识别为有效路径和文件名的东西。
为什么您提供的文件名不正确?好吧,这实际上很简单,在使用 nextInt()、nextDouble() 方法或任何需要提供数值的 Scanner 方法时,Scanner Class 有一个小问题,并且是当您按下键盘上的回车按钮时,您还提供了一个换行符,该换行符仍存储在扫描仪缓冲区中,并且仅在使用 Scanner.newLine() 方法时才释放,就像您在请求文件名时所做的那样待供应。换行符不会随您提供的数值一起发布,但是,当您提供文件名时,它会从缓冲区中向前拉出并取代实际为文件名键入的内容。这对你有意义吗?
幸运的是,这个问题有一个简单的解决方案,那就是在你的最后一个数字之后直接将 Scanner.newLine() 方法应用到空(无变量)输入请求,例如:
time = sn.nextDouble(); sn.nextLine();
你显然也想在 do/while 循环中执行此操作,但我认为你应该取消 do/while 并只使用这样的 while 循环(你能明白为什么吗?):
while(time < 0.0 || time > 10.0) {
System.out.println("Time cannot be smaller than zero and larger than ten!");
System.out.print("Please enter again: --> ");
time = sn.nextDouble(); sn.nextLine();
}
哦...一旦任务完成,不要关闭 PrintWriter 对象和扫描仪对象。