Создание программы, которая работает, если слово в порядке возрастания или нет
Я довольно новичок в Java и получил некоторые отзывы о моем преподавателе из моей работы над программой, которая работает, если слово в порядке возрастания, но я не совсем понимаю его. Может ли кто-нибудь помочь объяснить? Извините, если это очевидно для других. Обратная связь в комментариях ниже.
class Main
{
public static void main( String args[] )
{
System.out.print( "#Please enter a name : " );
String name = BIO.getString();
while(!name.equals("END")){
Boolean inOrder = true;
String nameLC = name.toLowerCase();
char previous = name.charAt(0);
for (int x = 0; x < nameLC.length() && inOrder ; x++) {
inOrder = nameLC.charAt(x) >= previous;
// inOrder must only be set false
previous = nameLC.charAt(x);
}
// The problem is you only want to set inOrder to be false
// If you set it to true as well then you will cancel out
// a possible previous finding of that two letters were out of order
if (inOrder && !name.equals("END"))
{
System.out.print(name + "\t" + "letters in ascending order");
}
else if (!inOrder && !name.equals("END"))
{
System.out.print(name + "\t" + "letters not in ascending order");
}
System.out.print("\n");
System.out.print("#Please enter a name : ");
name = BIO.getString();
}
}
}
Спасибо
3 ответа
for (int x = 0; x < nameLC.length(); x++) {
inOrder = nameLC.charAt(x) >= previous;
if(!inOrder) break;
previous = nameLC.charAt(x);
}
Если я вас правильно понял, вы хотите выйти, если одна буква не "в порядке".
Просто добавьте этот "перерыв"; Заявление к вашей петле, и вы должны быть в порядке.
Привет Тим
Если вы пошагово пройдете по своей программе для короткого имени, которое частично в порядке, то вы увидите проблему.
Например, "бар":
Когда вы получаете "a", так как "a" <"b", вы устанавливаете inOrder в false.
После этого вы должны выйти из цикла и вернуть false, но на самом деле вы продолжаете обрабатывать "r", и, поскольку "r" > "a", вы устанавливаете inOrder в true.
Похоже, что ваше решение уже не работает, если inOrder
установлено в false. У вас сложное состояние в вашем for
петля, которая выходит, когда inOrder
ложно
for(int x = 0; // Initialize x
x < nameLC.length() && inOrder; // Continue looping UNTIL x == nameLC.length() OR inOrder is false
x++){ // Increment x
inOrder = nameLC.charAt(x) >= previous; // Set inOrder, if it's false the for loop will exit