Java: использование строки для остановки цикла while, которое используется после ввода со сканера - PullRequest
0 голосов
/ 04 октября 2018

Я беру вступительный класс программирования с языком Java.Задание, над которым мы работаем, ставит меня в тупик.У меня есть цикл while , запрашивающий числовые значения, который заканчивается, когда вводится строковое значение, то есть

while (sc.hasNextDouble())
{...}

За ним следует другой вход сканера, который использует

if (sc.hasNextLine())

Проблема в том, что я использую строку для завершения верхнего цикла , в то время как , который затем немедленно используется сканером.Я попытался использовать оператор if / else для верхнего цикла с явным оператором break; , но это не сработало.Независимо от того, что я делаю, это все еще передается.Как мне подойти к этому?Любые указатели приветствуются.

РЕДАКТИРОВАТЬ: По запросу, вот некоторые из фактического кода.Имейте в виду, что это для произвольного присвоения класса, поэтому оно может не иметь большого смысла.

 //Request user input
        System.out.print("Please enter multiple double values. Enter q or any non double value to quit.");
        double doubleValue = 0.00; //declare doubleValue variable (for each entered double value)
        double sum = 0.00; //declare starting sum value variable at 0.00
        double doubleAverage = 0.00; //declare average of doubles variable
        //declare largest double value variable as MIN_VALUE to ensure any entered value is larger
        double largestDouble = Double.MIN_VALUE;
        //declare smallest double value variable as MAX_VALUE to ensure any entered value is smaller
        double smallestDouble = Double.MAX_VALUE; //declare smallest double value variable
        int count = 0; //set starting count

        while (sc.hasNextDouble())
        {
          doubleValue = sc.nextDouble();
          //System.out.print("Please enter another double value. Enter -1 to stop entering values.");
          sum = sum + doubleValue;
          count++;
          }

        /*
        * This section prompts the user for their first name and printd it in reverse.
        */

        System.out.print("Please enter your first name:");
        String fName = ""; //declare fName variable before requesting input
        if (sc.hasNext())
        {
          fName = sc.next();

После этого значение String используется для завершения цикла while, который я использовал дляоператор if в конце.

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Один из способов не передавать данные со сканера sc - создать новый объект сканера.Давайте назовем это scan.Таким образом, когда вы ссылаетесь на scan, он не будет знать о введенных ранее сканерах sc.

В вашем выражении if вы будете ссылаться на сканер scan вместо sc scanner.

Причина, по которой данные передаются из цикла while в ваш оператор if, заключается в том, что они оба ссылаются на один и тот же объект, и когда вы вызываете sc.hasNext(), он читает последнее, чтовы ввели в консоль.

0 голосов
/ 05 октября 2018

Другой допустимый параметр, предоставленный моим инструктором, заключался в использовании фиктивной переменной для использования входных данных сканера, например:

String fName = sc.next(); // Consume the Q or q here.

0 голосов
/ 04 октября 2018

Попробуйте прочитать ввод как String, а затем преобразовать его

Scanner sc= new Scanner(System.in);

String in = sc.nextLine();

while (!in.equals("q")) {

    try {
        Double d = Double.valueOf(in);
        // do whatever you like with d 
    } catch (NumberFormatException ex) {
        System.out.println("oi, that is not a double");
    }
    in = sc.nextLine();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...