Member 12833355 Ответов: 2

Как заставить программу задавать вопросы после ввода?


Я пробовал, главным образом с целью этого вопроса, сделать простую программу типа "калькулятор". Когда он запустится, последние 3 предложения будут распечатаны, не позволяя пользователю ничего вводить. Как сделать так, чтобы программа задавала вопрос только после ввода?
Заранее спасибо за любую помощь.

Что я уже пробовал:

import java.util.Scanner;
public class hello1{
public static void main(String[]args)
{

 Scanner scan = new Scanner(System.in);
 String s1 ="";
 int num1=0;
 int square=0;

    do
    {
    	System.out.println("Please enter a number between 1 and 20");
    	num1 = scan.nextInt();
    	System.out.println("Do you want to square this number?");
    	String s2 = scan.nextLine();
    	if(s2.equalsIgnoreCase("Yes"))
    	{
    		square = num1*num1;
    		System.out.println("The square is " + square);
    	}
    	else
    	{
    		System.out.println("No square");
    	}

        System.out.println("Do you want to continue? Y/N");//Print
        s1 =scan.nextLine();//Read

    }

    while(s1.equalsIgnoreCase("Y"));
}
}

2 Ответов

Рейтинг:
18

Richard MacCutchan

Просто добавьте дополнительную строку в свой код, как показано на рисунке:

System.out.println("Please enter a number between 1 and 20");
num1 = scan.nextInt();
scan.nextLine(); // add this line to consume the newline character
System.out.println("Do you want to square this number?");


Patrice T

Боюсь, что решение не может быть таким простым !
ОП уже использует scan.nextLine() во втором и третьем входах.
Это не соответствует описанию проблемы.

Richard MacCutchan

Да, так оно и есть.

Patrice T

Если добавление scan. nextLine () является решением, то описание должно говорить о пропуске второго ввода.

Richard MacCutchan

Я проверил свое исправление, и оно делает то, что хочет ОП. Если ваш тест не работает, пожалуйста, предоставьте подробную информацию.

Patrice T

В этом случае я подозреваю, что описание проблемы неверно, поэтому предлагаю отладить программу, чтобы увидеть, что происходит на самом деле.
У меня нет Java, чтобы проверить это.

Richard MacCutchan

Он не нуждается в отладке, это простая ошибка. После вызова scan.nextInt(); во входном буфере все еще есть, по крайней мере, неиспользованная новая строка. Итак, следующий звонок scan.nextLine(); будет читать это, а не ввод, введенный пользователем.

Рейтинг:
1

Patrice T

С помощью отладчика вы увидите, что именно num1, s2 и s1 содержать во время выполнения.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.