2015-03-11 2 views
-4

я застрял на уступки:
java.util.InputMismatchException при использовании java.util.Scanner

Использование Netbeans, написать класс под названием IO, в пакете с именем Util, содержащий методы: getInput(String) , getConsoleInput(String), showMessage(String), и showMessage(String, String).
Метод getInput(String) будет через GUI, метод getConsoleInput(String) будет вводить/выводить через консоль и возвращать объект сканера.
showMessage(String, String) примет заголовок для диалогового окна вывода.

Затем напишите программу, используя класс IO, но в отдельном файле и в пакете по умолчанию. Ваша программа сначала попросит пользователя ввести 2 целых числа. Если оба они положительные, напечатайте сумму. Затем он попросит 2 действительных числа (float или double); если только один отрицательный, напечатайте произведение из двух чисел. Если оба они отрицательные, напечатайте частное. Используйте вложенные, если это возможно.

Выход должен быть отформатирован. И все входные/выходные данные должны выполняться с помощью методов, которые вы создали. Все выходные данные должны быть выполнены через консоль и диалог.

Я считаю, что правильно написал свои методы, но когда мои программные коды называет их, я получаю несколько исключений ПОСЛЕ того, как я отвечаю на диалоговое окно.

Исключение:

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 Assignment4.main(Assignment4.java:18) 

Java-код:

public class Assignment4 { 
    public static void main(String[] args) { 
     Scanner scan = IO.getInput("Enter 2 integers"); 
     int x = scan.nextInt(); 
     int y = scan.nextInt(); 

     if (x > 0 && y > 0) 
      IO.showMessage(String.format("The sum is: %6.2d", (x + y))); 
    } 
} 
+0

Простите меня за то, тупыми, но я удалил 2-ую часть программы, и я все еще получаю исключение в строке 18. Если я прошу 2 целые числа в качестве входных данных, а затем отбрасывая это обратно в строку, что я делаю неправильно? – MDavis0818

+1

Пожалуйста, отметьте изменения на вопрос как таковые и не просто меняйте вопрос, не указывая так. Большинство ответов ниже, которые касались первого исключения, о котором вы спрашивали (IllegalFormatConversionException), теперь совершенно неактуальны. –

+0

Будет; Я аполитизирую. – MDavis0818

ответ

1

трассировки стека указывает на Assignment4.main (строка 20). Если вы посмотрите на код, который форматирует произведение двух целых чисел, он использует аргумент% f, который относится к плавающим числам, а не к десятичным знакам (см. Formatter)

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

+0

Ваше утверждение о неявной кастинге является правильным, но не дает результата. Кастинг должен выполняться явно перед назначением, то есть float product = (float) x * y; Для умножения это не имеет значения, но деление проблематично. –

+1

@ MichaelHeß Вы правы. Я только посмотрел на умножение, где это не имеет значения, но для разделения это имеет большое значение. Я уточню свой ответ. –

+1

добро пожаловать. В конце мы все здесь, чтобы помочь. ;) –

2

Исключением, которое вы видите, является то, что в нижней части вашего метода вы умножаете два целых числа, не плавающих. Результат по-прежнему является int и что int затем отправляется как параметр в строку с плавающим форматом (6.2 f). Поскольку форматтер ожидает параметр с плавающей запятой, он сбрасывается.

Вы можете исправить это, не повторно используя ints x и y, но определяя две новые переменные с плавающей запятой. (редактирование для триггера - по запросу)

+0

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

+0

@MarvinEMilBrach сделано. –

+0

Сделано здесь, тоже. –

-1

х, у является целым типом, поэтому использование% d заменить на% 6.2d

+0

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

0

Независимо вполне правильные исправлений предыдущих сообщений, проблемы вы имеете дело с

Исключение в потоке "основного" java.util.InputMismatchException
...
в java.util.Scanner.nextInt (Scanner.java:2119)
в Assignment4.main (Assignment4.Java: 18)

устраняет из-за несовпадения вашего ввода при использовании сканера (вызова nextInt(), но следующую последовательность не может быть превращена в Integer)

я предполагаю, что ваш вклад содержит дополнительные данные, между двумя целыми числами. Если это так, вам нужно установить разделитель, чтобы сканер мог корректно ввести ваш вход (см. http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#useDelimiter(java.lang.String))

Чтобы получить более конкретный ответ, вы должны предоставить свой ввод.

+1

В предыдущих ответах речь шла о другом исключении, чем показано в вопросе. –

+0

О, это не должно быть так. Спасибо за разъяснения! –

0

Большое спасибо за вашу помощь! Я все понял, кроме последней строки. 4-й метод перегружен и должен выводиться в диалоговое окно, и если оба числа отрицательные, напечатайте quotient, И измените заголовок и шрифт. Все работает, кроме изменения названия/шрифта, и у меня нет подсказки, чтобы это исправить. Вот мой обновленный код:

import java.util.Scanner; 
import Util.IO; 

public class Assignment4 { 
/* Calls the getInput method, requesting the user enter 2 integers, 
*then compares them to determine whether or not they're both 
*positive. If so, it returns the sum. 
*/     

public static void main(String[] args) { 
    Scanner scan = IO.getInput("Enter 2 integers"); 
    int x = scan.nextInt(); 
    int y = scan.nextInt(); 
    if (x > 0 && y > 0) IO.showMessage(String.format("The sum is: %d", 
      x + y)); 

    Scanner input = IO.getConsoleInput("Enter 2 real numbers"); 
    double b = input.nextDouble(); 
    double c = input.nextDouble(); 
    if (b < 0 && c > 0) IO.showMessage(String.format 
    ("The product is: %5.3f", (b*c))); 
    else if (b > 0 && c <0) IO.showMessage(String.format 
    ("The product is: %5.3f", (b*c))); 
    /*calls the overloaded showMessage method and displays the output 
    *to both the console and the dialog box, and changes the title 
    *and font of the dialog box. 
    */ 
    else if (b < 0 && c < 0) IO.showMessage(String.format 
    ("The quotient is: %5.3f",("Quotient"),(b/c))); 

    } 

} 
Смежные вопросы