#java
#java
Вопрос:
Я работаю над этим программированием уже около 3 недель и не могу разобраться в своих ошибках. Я должен использовать два открытых класса: 1) validateLength (число) и 2) convertIntegerToWords (число). Моя проблема в том, что как только пользователь вводит свое целое число, мой цикл продолжается вечно. Система запросит целое число, пользовательский ввод, system out либо слишком длинный, либо продолжит convertIntgerToWords. Мой код приведен ниже
import java.util.Scanner;
public class Project2 {
public static void main(String [] args) {
//Main Method//
//Create a Scanner//
Scanner input = new Scanner(System.in);
//Enter an Integer//
System.out.print(" What is your integer ? ");
int Number= input.nextInt();
while (Number >= 0) {
if (Number != 0)
validateLength(Number);
else if(Number == 0) {
System.out.print( "Thank you for playing! " "Good bye! ");
break;
}
}
}
//Next Method//
public static boolean validateLength(int userNum) {
String Number = "" userNum;
while (userNum >= 0) {
if (userNum < 10)
convertIntegerToWords(userNum);
else if (userNum > 9){
System.out.print("Your integer is too long !");
break;
}
}
}
//End of validate//
//Final Method//
public static String convertIntegerToWords(int Number) {
if (Number == 1)
System.out.println("Your integer " Number "is written out as one");
else if (Number == 2)
System.out.println("Your integer " Number "is written out as two");
else if (Number == 3)
System.out.println("Your integer " Number "is written out as three");
else if (Number == 4)
System.out.println("Your integer " Number "is written out as four");
else if (Number == 5)
System.out.println("Your integer " Number "is written out as five");
else if (Number == 6)
System.out.println("Your integer " Number "is written out as six");
else if (Number == 7)
System.out.println("Your integer " Number "is written out as seven");
else if (Number == 8)
System.out.println("Your integer " Number "is written out as eight");
else if (Number == 9)
System.out.println("Your integer " Number "is written out as nine");
return Number "";
}
}
}
Ответ №1:
Вам нужно переместить
Number = input.nextInt();
внутри while
цикла. Вот типичная идиома (также добавлена другая очистка):
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
// Enter an Integer//
System.out.print(" What is your integer ? ");
int Number;
while ((Number = input.nextInt()) >= 0)
{
if (Number == 0)
{
System.out.print("Thank you for playing! " "Good bye! ");
break;
}
validateLength(Number);
}
}
Редактировать
если пользователь вводит 0, то да, программа завершается. Однако, если пользователь вводит целое число 1-9, программа должна записать целое число словами (т. Е. 1 записывается как единица). Это делает это, но цикл бесконечен. Аналогично тому, как если бы пользователь вводил целое число больше 9, он сообщает, что «Ваше целое число слишком велико, введите другое целое число», однако это повторяется в одной и той же строке снова и снова.
Это из-за while
цикла в validateLength()
. Попробуйте это (также обратите внимание на другую очистку кода):
public class ScannerDemo
{
private static void convertIntegerToWords(int num)
{
String message = null;
if (num > 9)
{
message = "Your integer is too long!";
}
else if (num > 0)
{
message = "Your integer " num " is written out as ";
String numString = "";
switch (num)
{
case 1:
numString = "one"; break;
case 2:
numString = "two"; break;
case 3:
numString = "three"; break;
case 4:
numString = "four"; break;
case 5:
numString = "five"; break;
case 6:
numString = "six"; break;
case 7:
numString = "seven"; break;
case 8:
numString = "eight"; break;
case 9:
numString = "nine"; break;
}
message = numString;
}
System.out.println(message);
}
private static int getNextNumber(Scanner s)
{
System.out.println("What is your integer?");
return s.nextInt();
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int number;
while ((number = getNextNumber(input)) >= 0)
{
if (number == 0)
{
System.out.println("Thank you for playing! Good bye!");
break;
}
convertIntegerToWords(number);
}
}
}
Это также есть на github.
Комментарии:
1. Это работает хорошо. Спасибо за вашу помощь; однако, как только пользователь вводит целое число, равное или меньшее 9, программа записывает его, но продолжает работать вечно. Я добавил возвращаемый номер «»; строка, но по-прежнему безрезультатно.
2. Каково ожидаемое поведение после того, как пользователь введет число
<= 9
? Из вашего кода похоже, что пользователь должен иметь возможность завершить программу, введя0
, что и допускает код в моем ответе.3. @matt … если пользователь вводит 0, то да, программа завершается. Однако, если пользователь вводит целое число 1-9, программа должна записать целое число словами (т. Е. 1 записывается как единица). Это делает это, но цикл бесконечен. Аналогично тому, как если бы пользователь вводил целое число больше 9, он сообщает, что «Ваше целое число слишком велико, введите другое целое число», однако это повторяется в одной и той же строке снова и снова.
4. @Marc: проблема в
while
цикле внутриvalidateLength()
метода. Однако, как написано в вопросе,validateMethod()
не компилируется. Вы не возражаете отредактировать свой вопрос, включив в него код, который вы сейчас пытаетесь запустить?5. @Matt, не могли бы вы теперь рассказать мне, в чем разница между общедоступным статическим convertIntegerToWords (int), общедоступным статическим логическим значением validateLength и вашими частными статическими методами. Это программирование действительно ошеломляет!
Ответ №2:
ваше условие while всегда выполняется, поэтому оно будет продолжать проходить через цикл while. Это остановится только тогда, когда число больше не будет больше или равно нулю.
вам нужно использовать какое-то условие совершенно другого типа, если вы хотите использовать цикл (хотя я не могу сказать, почему вы этого хотите в этом примере). Вы никогда не меняете значение, связанное с Number, поэтому оно всегда будет таким, каким оно было создано в качестве экземпляра. Может быть, вы имели в виду код, который изменяет свое значение при выполнении определенного условия? Если нет, вам нужно полностью отказаться от этого условия.
Комментарии:
1. Я не уверен, что вы подразумеваете под условием. Поймите, хотя (число! = 0) но, если пользователь вводит целое число, равное <= 9, система должна ответить, что ваш INtger ** записан как *****. Что он и делает, но затем повторяет бесконечно
Ответ №3:
while (Number >= 0) {
Создает цикл while, где внутри я не вижу, чтобы вы уменьшали свое целое число, чтобы остановить цикл. Нужно ли здесь использовать цикл? Вместо этого вам следует попробовать использовать оператор if.
Кроме того, вы можете захотеть рассмотреть оператор switch вместо if для вывода.
Комментарии:
1. Я подумал, что вам понадобится оператор цикла, поскольку, если пользователь вводит что-либо большее, чем 9, он должен сообщить им, что их целое число слишком длинное, и повторить попытку. Я перепробовал весь switch с 9 случаями, но это тоже меня подвело.
2. @Marc Сколько раз вы заинтересованы в том, чтобы пользователь что-то вводил? Один раз, и только если оно больше девяти, повторить? Пожалуйста, уточните назначение, и я постараюсь помочь.
3. @Chalise.. Мне нужно, чтобы пользователь продолжал вводить, пока он не введет 0. Вся программа должна делать что-то вроде этого:
4. Какое у вас целое число? 9 Ваше целое число 9 записывается как девять Какое у вас целое число? 10, что равно большому, введите другое целое число, какое у вас целое число? 0 Завершаю, спасибо за игру
5. @Marc — Я думаю, у тебя есть свой ответ 🙂 Рад видеть, что это решено
Ответ №4:
Добро пожаловать в StackOverflow.
Я чувствую необходимость упомянуть, что у вас есть один класс Project2
и два метода, а не классы. Вы получаете int
не целое число и не можете прочитать следующую строку, что, как я подозреваю, является вашей проблемой, если вы не ожидаете, что пользователь введет все в первой строке.
Я предлагаю вам научиться использовать отладчик, поскольку это может быть очень полезно для поиска отладок и понимания того, что делает ваша программа. особенно для циклов, которые не заканчиваются.
Комментарии:
1. Спасибо за урок по классу и методам. Я очень новичок в этом и пытаюсь действительно понять. Я запускаю eclipse, но у меня все еще возникают проблемы с ним.
Ответ №5:
//Main Method//
public static void main(String [] args) {
//Create a Scanner//
Scanner input = new Scanner(System.in);
bool bPlay = true;
while (bPlay) {
//Enter an Integer//
System.out.print(" What is your integer ? ");
int Number= input.nextInt();
if (Number != 0)
validateLength(Number);
else if(Number == 0) {
System.out.print( "Thank you for playing! " "Good bye! ");
bPlay = false;
break;
}
}
}
Ответ №6:
public static boolean validateLength(int userNum) {
String Number = "" userNum;
while (userNum >= 0) {
if (userNum < 10)
convertIntegerToWords(userNum);
else if (userNum > 9){
System.out.print("Your integer is too long !");
break;
}
}
Этот код отвечает за проблему, вы никогда не присваиваете userNum новое значение, а выполняете цикл, пока userNum> 0. Это создает благоприятное место для бесконечного цикла для чисел >=0 и <10. (вы оставляете цикл ony для числа>9).