Создание программы, которая работает, если слово в порядке возрастания или нет

Я довольно новичок в 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
Другие вопросы по тегам