Защо мога да въведа нещо за моята операция?

Така че се опитвам да направя прост калкулатор в java, но нямам представа как да получа вход за коя операция. Програмата иска два номера, след което иска оператор. Всичко работи добре, когато го стартирам, докато стигна до типа операция. Компилаторът просто го прескача и дори не ми позволява да въвеждам нищо за него. Някакви улики?

Scanner keyboard = new Scanner(System.in);

double x;
double y;
double sum =0;
double minus =0;
double times =0;
double divide =0;
double nCr =0;
String Op;

System.out.print("X: ");
x = keyboard.nextDouble();
System.out.print("Y: ");
y = keyboard.nextDouble();
System.out.print("Op: ");
Op = keyboard.nextLine();

person Squash    schedule 27.05.2013    source източник
comment
моля, извинете за "а" и "б". превключих го на 'x' и 'y', така че съвпада   -  person Squash    schedule 28.05.2013
comment
Вижте: stackoverflow.com/questions/5032356/using-scanner-nextline   -  person maybeWeCouldStealAVan    schedule 28.05.2013
comment
възможен дубликат на проблем със скенера при използване на nextLine след nextXXX   -  person Eng.Fouad    schedule 28.05.2013


Отговори (3)


Опитвам:

System.out.print("X: ");
x = Double.parseDouble(keyboard.nextLine());
System.out.print("Y: ");
y = Double.parseDouble(keyboard.nextLine());
System.out.print("Op: ");
op = keyboard.nextLine();

Това ще анализира числото, което въвеждате в Double, и ще прочете връщането на каретката.

Ако искате контрол на грешки (ако потребителят въведе низ вместо число):

Boolean check = true;

do
{
    try
    {
        //The code to read numbers
    }
    catch(InputMismatchException e)
    {
        System.err.println("Please enter a number!");
        check = false;
    }
}
while(check == false)
person Jhon    schedule 27.05.2013
comment
Благодаря ти много! Работи, но не ми е ясно защо го прави. Какво точно прави анализът? - person Squash; 28.05.2013
comment
keyBoard.nextLine() ще прочете входа като String, след което Double.parseDouble ще се опита да анализира това String до Double. Ако не може да го анализира, ще хвърли InputMismatchException всеки път, когато потребителят въведе нещо, което не е число (напр.: Потребителят въвежда „Здравей“). - person Jhon; 28.05.2013

Вместо

Op = keyboard.nextLine();

Опитайте да използвате

Op = keyboard.next();

Изглежда като nextLine(); метод ви създава проблем, когато се извиква с методи като nextInt(), nextDouble().

Наблюдение: Ако nextLine() се извика сам, това не се случва.

person dilusha manjari    schedule 29.05.2013

По принцип nextDouble не разпознава връщането на каретката. Използвайте nextLine след всяко nextDouble.

person BlackHatSamurai    schedule 27.05.2013