2016-10-07 2 views
0

Я пытаюсь написать программу, которая побуждает пользователя вводить скорость и время. После этого мне нужно рассчитать distance = velocity * time. Если пользователь вводит время меньше нуля и больше времени, то мне нужно повторно запросить пользователя.Ошибка при использовании PrintWriter

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 && 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); 
    } 
} 

Вопрос-почему я получаю эту ошибку:

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: Как я могу сделать этот файл?

+0

час \t \t Расстояние Путешествовал =========================== –

+1

Подсказка: используйте ** предварительный ** функциональность для обеспечения того, чтобы ваш вопрос правильно отформатирован. На ваш беспорядочный вход уже работают два человека! Потратьте еще немного времени в следующий раз! – GhostCat

+0

Также вы должны изменить условие while, число не может быть < 0 and > 10 в то же время, я предлагаю вам написать 'while (время < 0 || time > 10)' – aleb2000

ответ

0

Есть целый ряд вопросов, с вашим кодом и aleb2000 уже упоминалось в один большой (взять aleb2000 «s совет), но мы коснемся только на один ваш вопрос в конечном счете о том, что и это ошибка, которую вы получают.

Вы получаете эту ошибку, потому что ваша поставляется имя выходного файла на самом деле сканер новой строки характер и PrintWriter не знает, что делать с этим. Это не то, что он распознает как допустимый путь и имя файла.

Почему именно так, как указано в прилагаемом файле? Ну, на самом деле это довольно просто, при использовании методов nextInt(), nextDouble() или любого метода Scanner существует небольшая причуда с классом сканера, которая ожидает, что числовое значение будет предоставлено, и это когда вы нажмете кнопку ввода на клавиатуре, вы также снабжаете символ новой строки, который остается сохраненным в буфере сканера, и выдается только тогда, когда метод 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 после завершения задачи.