Что не так с моим циклом выполнения JAVA? - PullRequest
1 голос
/ 03 марта 2011

Я изучаю JAVA и пытаюсь написать свой первый цикл.Цикл должен предложить пользователю угадать определенное имя.

Код не выполняется правильно.Я пытался найти помощь по различным JAVA-тутурьялам, но не нашел ни одного примера, где вы угадываете имя / строку, но много, где вы должны угадать число.

Это мой код:

 /**
     *
     * @author mso_
     */
    import java.util.Scanner;

    public class GuessName {

        /**
         * @param args the command line arguments
         */

        public static final int C_Max_Trials = 10;

        public static void main(String[] args) {
            //Define correct name
            String name = "Morten";
            String guessName;

            //Create a scanner
            Scanner guess = new Scanner(System.in);

            //Recieve a guess
            do {
            System.out.println("Please guess my name. Enter your guess here: ");
            String guessName = guess.next(); <-- ERROR

            //Create loop
            } while (guessName != name); <-- ERROR
                System.out.println("Sorry, wrong guess, please enter another guess: ");

              if (guessName = name); <-- ERROR
                System.out.println("Right on! ");


        }

    }

Что я сделал не так?

Ответы [ 11 ]

3 голосов
/ 03 марта 2011

Сравнение строк

Нельзя сравнивать строки, подобные этой. Это будет только сравнение ссылок. Вы должны использовать метод equals ():

while (! guessName.equals(name));

Небольшое объяснение: http://www.zparacha.com/java-string-comparison/

Переменная redeclaration

В вашем коде есть еще одна ошибка, вы пытаетесь переопределить имя догадки внутри цикла. Вы должны объявлять имя_ударения только один раз вне цикла (т. Е. До do {).

Общие ошибки

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

  1. if (guessName = name); Это бесполезное утверждение как таковое, вы должны открыть блок: if(condition) { statement; }
  2. Та же строка: вы выполняете задание, а не сравнение, и, как сказано, со строкой вы должны использовать .equals ()
  3. System.out.println() не будет выполняться, когда вы думаете. Перечитайте документ о цикле do {} while (), пока вы действительно не поймете их.

Мой совет: внимательно прочитайте сообщение об ошибке вашего компилятора и прочитайте несколько документов, прежде чем писать код.

1 голос
/ 03 марта 2011

Какие ошибки?

Использовать .equals при сравнении строк

0 голосов
/ 03 марта 2011

Вот что говорит javac компилятор:

GuessName.java:26: guessName is already defined in main(java.lang.String[])
        String guessName = guess.next(); //<-- ERROR
               ^
GuessName.java:32: incompatible types
found   : java.lang.String
required: boolean
              if (guessName = name);// <-- ERROR
                    ^
2 errors

Для первого вы не должны объявлять другую локальную переменную: отбросьте String. Во-вторых, используйте .equals для сравнения String объектов, как говорит документ.

Вы получите что-то подобное:

...
//Recieve a guess
do {
  System.out.println("Please guess my name. Enter your guess here: ");
  guessName = guess.next(); //<-- FIXED
  //Create loop
} while (!guessName.equals(name)) //<-- FIXED

if (guessName.equals(name))// <-- FIXED
  System.out.println("Right on! ");
}
...

, который работает правильно.

0 голосов
/ 03 марта 2011

Строка String guessName = guess.next(); должна быть изменена на:

guessName = guess.next();

Потому что "guessName" уже определено ранее.

Кроме того, при сравнении строк необходимо использовать метод equals, а не оператор ==. Так что } while (guessName != name); должно быть:

} while (!guessName.equals(name));

И if (guessName = name); следует изменить на:

if (guessName.equals(name))
0 голосов
/ 03 марта 2011

Попробуйте это

public class GuessName {

        /**
         * @param args the command line arguments
         */

        public static final int C_Max_Trials = 10;

        public static void main(String[] args) {
            //Define correct name
            String name = "Morten";
            String guessName = null;

            //Create a scanner
            Scanner guess = new Scanner(System.in);

            //Recieve a guess
            do {
            System.out.println("Please guess my name. Enter your guess here: ");
            guessName = guess.nextLine(); <-- ERROR

            if(!guessName.equals(name))
            {
               System.out.println("Sorry, wrong guess, please enter another guess: ");
            }

            //Create loop
            } while (!guessName.equals(name)); <-- ERROR


              if (guessName.equals(name)) <-- ERROR
                System.out.println("Right on! ");


        }

    }
0 голосов
/ 03 марта 2011

Помимо прочего, после if:

if (name.equals(guessName))  //removed the semicolon and use .equals 
   System.out.println("Right on! ");

указана неверная точка с запятой, и это сравнение вместо сравнения, как другие состояния ответа на данный момент.

0 голосов
/ 03 марта 2011

Строки должны сравниваться с использованием метода equals.

0 голосов
/ 03 марта 2011

Это не скомпилируется для начала - вы объявляете String guessName в третьей строке основного метода, а затем объявляете ту же самую переменную снова в цикле do.Вам просто нужно использовать имя переменной, чтобы присвоить ей:

guessName = guess.next();

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

0 голосов
/ 03 марта 2011

вы сравниваете два объекта.Не два строковых значения.используйте equals

0 голосов
/ 03 марта 2011

Вы сравниваете ссылки (ну, с guessName = name, вы на самом деле присваиваете значение hopName). Используйте String.equals() вместо == и !=.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...