Программа компилируется, но не запускается

Это задание, которое я должен выполнить.

Может ли кто-нибудь вести меня в правильном направлении?

Программа компилируется, но работает некорректно.

Ошибка является исключением InputMissmatch.


person TitanC    schedule 08.03.2013    source источник
comment
Ошибка — это исключение InputMissmatch. => Исключение должно указывать на строку, выдающую исключение. Это должно помочь вам сузить сферу вашего расследования.   -  person assylias    schedule 08.03.2013
comment
Какой ввод вы даете? вы вводите как A, B, C или 0,1,2 и т. д.?   -  person Pradeep Simha    schedule 08.03.2013
comment
Сейчас самое время ознакомиться с вашим отладчиком.   -  person radai    schedule 08.03.2013
comment
Не читая код, если вы получаете InputMissmatch, это означает, что вы вводите с клавиатуры что-то, отличающееся от типа переменной, в которую вы вводите информацию. Например, ввод символа в поле int.   -  person Kakalokia    schedule 08.03.2013
comment
Я пытаюсь заставить пользователя вводить A, S, M, D, O или E по своему выбору, а затем операторы if должны делать все остальное?   -  person TitanC    schedule 08.03.2013
comment
Сейчас самое время познакомиться с различными примитивами.   -  person Evan Knowles    schedule 08.03.2013
comment
Подсказка: вы просите пользователя ввести букву, но ваше первое присвоение переменной сканером — это присвоение типа float.   -  person tymeJV    schedule 08.03.2013
comment
если вы хотите, чтобы пользователь вводил буквы, которые вы упомянули, то измените тип с плавающей запятой на тип, который принимает буквы, например String   -  person Kakalokia    schedule 08.03.2013
comment
Вы просите пользователя ввести букву и читаете ее с помощью nextFloat(). Разве не очевидно, что это приведет к исключению?   -  person JB Nizet    schedule 08.03.2013
comment
Я все еще полностью изучаю Java, так что простите меня.   -  person TitanC    schedule 08.03.2013
comment
Кроме того, возможно, просто получите один вход и проверьте, какой это вход, вместо того, чтобы назначать все эти переменные.   -  person bjedrzejewski    schedule 08.03.2013
comment
Вы должны выполнить немного больше диагностики для такого рода вопросов. Дайте нам полную трассировку стека исключения и сообщите нам, каковы значения различных переменных в точке, где оно произошло, а также какой ввод был обработан.   -  person millimoose    schedule 08.03.2013
comment
Кроме того, рассмотрите возможность упрощения примеров кода, чтобы изолировать вашу ошибку. т.е. попробуйте удалить любой и весь код, пока все, что у вас есть, не будет достаточным для создания ошибки для данного ввода.   -  person millimoose    schedule 08.03.2013
comment
Хорошо, спасибо за все предложения и советы. Я работаю над этим.   -  person TitanC    schedule 08.03.2013


Ответы (2)


Ваша проблема в том, что вы вводите букву в поле с плавающей запятой. В вашей программе вы просите пользователя ввести поплавок:

A = hope.nextFloat();

Но если вы введете букву «А», вы получите исключение, потому что «А» — это не число с плавающей запятой, а строка.

Более простой способ решить вашу проблему - вместо того, чтобы иметь все поля выбора, вы просто читаете ввод, который пользователь вводит со сканера, например:

String choice = hope.next();

Затем в операторе if вы проверяете, равно ли значение из строки выбора определенной букве, например

if (choice.equals("A")) {
        number4 = (number1 + number2 + number3);
        System.out.printf("Your results are:" + (number4));
    } 

И вы можете сделать то же самое для других вариантов, которые у вас есть.

person Kakalokia    schedule 08.03.2013
comment
Я сделал это и отредактировал код. Программа отлично работает сейчас. Простое исправление, которое я должен был понять. Я все еще учусь и много думал о том, что я должен был сделать. Спасибо - person TitanC; 08.03.2013

Ошибка, которую вы получаете, означает, что вы пытаетесь использовать какие-то данные в качестве других, в вашем случае вы, вероятно, пытаетесь использовать String в качестве числа с плавающей запятой.

При использовании любого из методов next в классе Scanner вы должны сначала убедиться, что пользователь вводит соответствующие данные.

Для этого вам нужно использовать методы has.

Ваша проблема в том, что вы не проверяете, является ли ввод правильным поплавком или нет, прежде чем использовать ваш Scanner.nextFloat();

Вы должны сделать что-то вроде этого:

if (hope.hasNextFloat())
{
    // Code to execute when you have a proper float, 
    // which you can retrieve with hope.nextFloat()
}
else
{ 
    // Code to execute when the user input is not a float
    // Here you should treat it properly, maybe asking for new input
}

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

Кроме того, дополнительные сведения см. в документации API Scanner. Детали.

ИЗМЕНИТЬ

Кроме того, вы просите пользователя ввести символы (или строки): «A», «B» и т. д., но пытаетесь сравнить их с числом с плавающей запятой. Это неправильно, вы должны сравнить их со строкой или символом, например:

if (hope.hasNextString())
{
   if (hope.nextString().equals("A"))
   {
       // Code for option "A"
   }
   else if (hope.nextString().equals("B"))
   {
       // Code for option "B"
   }
   else ...
}

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

person Héctor Luaces Novo    schedule 08.03.2013