Импорт методов в Java

Я новичок в Java, и я учился из книги Мураха, как проверять входные данные. Я сам сделал простые ресторанные менюù, но когда я импортирую метод проверки данных из созданного мной служебного класса, он почему-то не работает! (трассировка стека в конце потока).

Но если я помещаю его в класс menù, он просто работает (только для menùid, но он также должен идти и для "spesa"), поэтому при импорте должно быть что-то не так ... или, может быть, я сделал что-то не так.

Класс полезности ниже:

   class utilità {
    protected static int getint (Scanner sc){
        int t = 0;
        boolean check = false;
            while (check == false) {
                if (sc.hasNextInt())
                {
                    t = sc.nextInt();
                    check = true;
                }
                else {
                    System.out.println("Errore! Si prega di inserire un numero 
    intero.");
                } sc.nextLine();
            } return t;
    }
    }
   //  My menù class :
     protected static void Menù(){
       int menùid;
       System.out.println("Benvenuto nel menù del ristorante!");
       System.out.println("Inserire 0 per uscire :");
       System.out.println("Inserire 1 per ricevere un suggerimento per 
    l'ordinazione :");  
        menùid = utilità.getint(data);
            switch (menùid){
                case 1 :
                    Decidi();
                               System.out.println("Ottima scelta!");
                    break;
                case 0 :
                                System.out.println("Arrivederci e grazie!");
                    break;
            }
       } } <code>
My import : import menùautomatizzato.utilità; import java.util.*;
My main class : mainclass.java (there's only the main method where i use the Menù function)


//Method decidi()
protected static void Decidi () {
       System.out.println("Inserire quanto si pensa di spendere");
       double spesa = data.nextDouble();
       if (spesa >= 50)
           System.out.println("Il ristorante suggerisce : Primo , secondo e contorno per 2 persone");
       else if (spesa <= 50)
           System.out.println("Il ristorante suggerisce : Primo e contorno per 2 persone");
       else if (spesa < 25)
           System.out.println("Il ristorante suggerisce : Primo e contorno per 1 persona");          
   }

Текст кода показан на итальянском, потому что это мой язык.

Ошибка, возникающая при выборе варианта 1 в меню, когда пользователь вводит букву вместо числа, и getint должен обрабатывать это исключение:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.throwFor(Scanner.java:864)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextDouble(Scanner.java:2413)
    at menùautomatizzato.MenùAutomatizzato.Decidi(MenùAutomatizzato.java:12)
    at menùautomatizzato.MenùAutomatizzato.Menù(MenùAutomatizzato.java:28)
    at menùautomatizzato.mainclass.main(mainclass.java:10)
Java Result: 1

Я был немного глуп, спасибо за JBnizet, который заставил меня реализовать исправление в комментариях, исправить:

 protected static double getdouble(Scanner sc){
        double d = 0;
        boolean check = false;
            while (check == false) {
                if (sc.hasNextDouble())
                {
                    d = sc.nextDouble();
                    check = true;
                }
                else {
                    System.out.println("Errore! Si prega di inserire un numero.");
                } sc.nextLine();
            } return d;
    }

Пожалуйста, объясните "не работает". Вы получаете ошибку компиляции, исключение времени выполнения или результаты, отличные от ожидаемых?

Pshemo 05.01.2019 19:26

И если вы получите ошибку (компиляция или время выполнения), то сначала прочтите ее, а затем опубликуйте, полностью и точно.

JB Nizet 05.01.2019 19:28

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

RandomCoder99 05.01.2019 19:30

Что ты имеешь в виду? Первая попытка, которую я сделал, похожа на книгу, я просто написал код проверки данных вместе с остальными, и он работал, я что-то пропустил, когда переписывал?

RandomCoder99 05.01.2019 19:33

Итак, ошибка возникает, когда пользователь выбирает первый вариант. В этом случае вызывается метод Decidi. Это подтверждается трассировкой стека, которая показывает, что проблема возникает в строке 12 файла MenAutomatizzato.java, внутри метода Decidi. Но вы не опубликовали этот метод.

JB Nizet 05.01.2019 19:33

Я имею в виду, что если вы установите его в класс, а затем предоставите букву вместо числа, это не просто сработает. Это вызывает то же исключение. Таким образом, он работает точно так же, как если бы вы включили его в класс меню.

Elliott Frisch 05.01.2019 19:34

Хорошо, теперь вы знаете, что вызов data.nextDouble () сообщает вам, что следующий токен не является двойным. Итак, ваши предположения о том, что содержит data, неверны. Но мы не знаем, что такое data, как вы его определили и что он должен содержать.

JB Nizet 05.01.2019 19:36

@ElliottFrisch Называть пользователя «лжецом» - это недобро и противоречит Нормы поведения стороны.

Joe C 05.01.2019 19:38

Данные используются в decidi () для вставки значения в евро, которое анализируется в if, и дает ответ, основанный на том, сколько евро пользователь готов потратить в ресторане, я надеюсь, это объясняет

RandomCoder99 05.01.2019 19:39
Но если я поставлю его в мужской класс, он просто работает Тогда сделай это.
Elliott Frisch 05.01.2019 19:40

Нет, это не так. Разместите соответствующий код. Когда вы пытаетесь найти ошибку в коде, важен код. Много.

JB Nizet 05.01.2019 19:40

JBnizet только что заставил меня понять, что код работает для данных, если я введу "a" вместо 25 евро, например, исключение будет обработано! Но я хочу, чтобы этот метод работал и для menùid, если это возможно .. Следует ли мне сделать другой метод, но вместо getint a getdouble, чтобы исправить это?

RandomCoder99 05.01.2019 19:42

извините, Эллиот, я понимаю, на что вы хотите указать, но программа должна работать как метод обучения, чтобы научиться быть как можно более эффективным (для начинающих), и поэтому в ней говорится: «Используйте больше классов для методов ... "и так далее ... так что мне нужно разделить все на части

RandomCoder99 05.01.2019 19:44

как бы то ни было, я неправильно объяснил себя, данные и люди работают нормально, это "spesa", которая выдает ошибку, и я должен ее обработать, можно ли на этот раз создать еще один метод для проверки двойного значения?

RandomCoder99 05.01.2019 19:46

Я не уверен, о чем вы спрашиваете. Все, что я могу сказать, это то, что ваш метод вызывает data.getDouble (), и что если следующий токен в данных не является Double, то, конечно, как описано в документации, это вызовет исключение. Поэтому, если вы хотите поддерживать другие типы данных, вам необходимо изменить код этого метода, чтобы обрабатывать другие типы данных так, как вы хотите.

JB Nizet 05.01.2019 19:48

спасибо JBNizet, я знаю, что объяснял себя совершенно неправильно, извиняюсь за это, и да, мне нужно добавить код в служебный класс, чтобы на этот раз обработать исключение для двойных данных. Еще раз спасибо!

RandomCoder99 05.01.2019 19:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
16
80
0

Другие вопросы по теме