#java #printwriter
#java #printwriter
Вопрос:
Я пытаюсь написать программу, которая предлагает пользователю ввести скорость и время. После этого мне нужно вычислить distance = velocity * time
. Если пользователь вводит время меньше нуля и больше времени, мне нужно повторно запросить пользователя.
Hour Distance Travelled
===========================
1 40
2 80
3 120
Например, если пользователь вводит время как 5, таблица должна выглядеть следующим образом:
Hour Distance Travelled
===========================
1 40
2 80
3 120
4 160
5 200
Мне нужна таблица, подобная приведенной выше, но мне нужно вывести таблицу в текстовый файл.
Вот мой код:
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 amp;amp; 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: Как я могу нарисовать этот файл?
Комментарии:
1. Пройденное часовое расстояние ===========================
2. Подсказка: используйте функцию предварительного просмотра , чтобы убедиться, что ваш вопрос правильно отформатирован. Над вашим беспорядочным вводом уже работают два человека! В следующий раз потратьте на это больше времени!
3. Также вам следует изменить условие while, число не может быть < 0 и> 10 одновременно, я предлагаю вам написать
while(time < 0 || time > 10)
4. Ваша проблема в том, что у вас есть
PrintWriter.java
файл рядом сLab4.java
исходным файлом. Это скрываетjava.io.PrintWriter
класс, аPrintWriter.java
файл является «плохим исходным файлом», хотя точно, что это означает, неясно (вероятно, он не объявляетPrintWriter
класс). Просто сделайте то, что указано в сообщении об ошибке: пожалуйста, удалите .5. Используйте IDE (интегрированную среду разработки), такую как Eclipse , это избавит вас от лишних хлопот.
Ответ №1:
Существует ряд проблем с вашим кодом, и aleb2000 уже упоминал о большой проблеме (воспользуйтесь советом aleb2000), но мы коснемся только того, о чем в конечном итоге ваш вопрос, и это ошибка, которую вы получаете.
Вы получаете эту ошибку, потому что предоставленное вами имя выходного файла на самом деле является символом новой строки сканера, и PrintWriter не знает, что с этим делать. Это не то, что он распознает как допустимый путь и имя файла.
Почему указанное вами имя файла неверно? Ну, на самом деле это довольно просто, есть небольшая проблема с классом Scanner при использовании методов nextInt(), nextDouble() или любого другого метода сканирования, если на то пошло, который ожидает, что будет предоставлено числовое значение, и когда вы нажимаете кнопку ввода на клавиатуре, вы такжеввод символа новой строки, который остается сохраненным в буфере сканера и освобождается только тогда, когда используется метод 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, так и ваш объект Scanner после завершения задачи.