java.util.InputMismatchException

187
09 июля 2018, 07:30

Помогите разобраться, я новичок. Ошибка:

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530) at java.util.Scanner.nextInt(Scanner.java:2160) at java.util.Scanner.nextInt(Scanner.java:2119) at kalkulator.main(kalkulator.java:36) "

Вот код:

import java.util.Scanner;
public class kalkulator {
    public static void main (String[]args){
        Scanner vod = new Scanner(System.in);
        int cheslo1,cheslo2,rezultat;
        String diya;
        System.out.println("Введіть перше число:");
        cheslo1 = (vod.nextInt());
        System.out.println("Введіть друге число:");
        cheslo2 =(vod.nextInt());
        System.out.println("Виберіть дію +-/*");
        diya =vod.nextLine();
        if(diya.equals("+"))
        {
            rezultat =cheslo1+cheslo2;
        }
        else if(diya.equals("-"))
        {
            rezultat=cheslo1-cheslo2;   
        }
        else if(diya.equals("/"))
        {
            rezultat=cheslo1*cheslo2;
        }
        else if(diya.equals("*"))
        {
            rezultat=cheslo1+cheslo2;
        }
        cheslo2 = (vod.nextInt());
        rezultat=cheslo1 + cheslo2;
        System.out.print("Результат:");
        System.out.print(rezultat);
    }
}
Answer 1

В общем ниже переделанный вариант с измененными названиями переменных не генерирует исключения:

public static void main(String[] args){
    double val, val1, result;
    String symbol;
    try(Scanner scan= new Scanner(System.in)){
        System.out.println("Введите первое число: ");
        val = scan.nextDouble();
        System.out.println("Введите второе число: ");
        val1 = scan.nextDouble();
        System.out.println("Введите знак: ");
        symbol= scan.next();
    }

    switch (symbol){
        case "/" : result = val / val1;
        break;
        case "*" : result = val * val1;
        break;
        case "+" : result = val + val1;
        break;
        case "-" : result = val - val1;
        break;
        default: result = -1;
        break;
    }
    System.out.println(result);
}

Ошибка могла быть из-за того что:

  • Вы не закрываете vod
  • Вы используете nextLine(), который используется по иному.
  • Зачем вы второй раз присваиваете значение переменной cheslo2 Но лучше используйте переделанную мной программу:
Answer 2
import java.util.Scanner;
public class kalkulator {
    public static void main(String[] args) {
        Scanner vod = new Scanner(System.in);
        double cheslo1, cheslo2, rezultat = 0;
        String diya;
        System.out.println("Введіть перше число:");
        cheslo1 = (vod.nextDouble());
        System.out.println("Введіть друге число:");
        cheslo2 = (vod.nextDouble());
        System.out.println("Виберіть дію +-/*");
        // diya =vod.nextLine(); 
        diya = vod.next(); 
        if (diya.equals("+")) {
            rezultat = cheslo1 + cheslo2;
        } else if (diya.equals("-")) {
            rezultat = cheslo1 - cheslo2;
        } else if (diya.equals("/")) {
            rezultat = cheslo1 / cheslo2;
        } else if (diya.equals("*")) {
            rezultat = cheslo1 * cheslo2;
        }
        //cheslo2 = (vod.nextInt());
        // rezultat=cheslo1 + cheslo2;
        System.out.print("Результат:" + rezultat);
    }
}

Для чтения строки из потока ввода применяются методы next() или nextLine().

Используемые методы сканера:

next (); - считывает введённую строку до первого пробела

nextLine (); - считывает всю введённую строку

nextInt (); - считывает введённое число int

nextDouble (); - считывает введённое число double

READ ALSO
Как узнать все вхождения символа в строке в Java?

Как узнать все вхождения символа в строке в Java?

Например, имеем строку "кровоточивость", и нужно узнать индекс каждой буквы "о",как это сделать,не переводя строку в массив?

192
How to get Object's toString()?

How to get Object's toString()?

Имеется класс BloodCell в очень большой и длинной иерархии классов общего назначенияВажно: все классы по своему определяют toString()

186
Генерация swagger yml в springfox

Генерация swagger yml в springfox

Как из springfox-swagger2 получить yml файл с описанием rest api?

177
В файл записывается только текст до пробела java

В файл записывается только текст до пробела java

Есть вот такая функция, которая вызывается в главном методе, нужно чтобы она записывала в конец существующего файла некоторый текст, но она...

167