Почему это выдает ошибку / не запускается вообще? - PullRequest
2 голосов
/ 23 октября 2019

Я запускаю это в коде VS и компилирую и запускаю через терминал с установленным надлежащим JDK, но кажется, что ничего не работает, он просто гаснет, а затем я набираю «clear» и выдается исключение несоответствия. Может кто-нибудь объяснить, почему? Спасибо:)

import java.util.Scanner;
class realTime {

    public static void Time(int seconds) {

        int min = 0, hours = 0;

        min = (int)seconds / 60;
        hours = (int)seconds / 3600;

        System.out.println("Hours: " + hours);
        System.out.println("Minutes: " + min);

    }

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int seconds = scan.nextInt();

        Time(seconds);
    }
}

Я знаю, что он не будет правильно вычислять мин и часы, я просто записываю код, чтобы проверить, работает ли он.

Ответы [ 4 ]

3 голосов
/ 23 октября 2019

Поскольку терминал ожидает какое-то значение, в следующих строках:

Scanner scan = new Scanner(System.in);
int seconds = scan.nextInt();

В основном вы создаете объект Scanner и объявляете переменную int, ожидающую значение, в данном случае следующее целое число, чтобы что-то сделать.

Просто введите целое число в вашем терминале, и оно должно работать нормально.

2 голосов
/ 23 октября 2019

Решение уже присутствует в других ответах, но почему InputMismatchException - то, о чем этот ответ.

Из документов,

Например, этот код позволяетпользователь читает число из System.in:

 Scanner sc = new Scanner(System.in);
 int i = sc.nextInt();

For nextInt()

public int nextInt ()

Сканирует следующийтокен ввода в виде целого числа.

Throws: InputMismatchException - если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона

Здесь "clear"не совпадает с регулярным выражением Integer.

Поскольку вы не передаете никакой метод radix методу nextInt(), он ожидает, что вход будет иметь только 0-9 (по умолчанию используется десятичная система счисления - Base 10). Если бы это было nextInt(16), он принял бы любой шестнадцатеричный (0-F, Base 16) номер и т. Д.

Стоит отметить еще один случай, когда вы можете получить то же исключение, это происходит, еслиinput > Integer.MAX_VALUE.

1 голос
/ 23 октября 2019

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

Ошибка отображается, потому что вы вводите значение типа String, но сканер ожидает тип int.

Надеюсь, это решит проблему.

0 голосов
/ 23 октября 2019

У вас должно быть приглашение для того, чтобы пользователь вводил время в секундах, чтобы ваш сканер мог получить что-то, что можно вставить для ваших секунд int. Сделайте что-то вроде этого:

System.out.println("Enter seconds to convert");
   int seconds = scan.nextInt();
...