我的JAVA do循环有什么问题?

时间:2011-03-03 18:15:24

标签: java loops

我正在学习JAVA并尝试编写我的第一个循环。循环应该提示用户猜出一个已定义的名称。

代码执行不正确。我曾尝试在不同的JAVA tuturials上搜索帮助,但没有找到任何你猜猜名字/字符串的例子,但你应该猜测一个数字。

这是我的代码:

 /**
     *
     * @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 个答案:

答案 0 :(得分:3)

字符串比较

你无法比较这样的字符串。这只会比较参考文献。您必须使用equals()方法:

while (! guessName.equals(name));

一点解释:http://www.zparacha.com/java-string-comparison/

可变重新声明

您的代码中还有另一个错误,您尝试在循环内重新声明guessName。您必须在循环之外(即do {之前)声明guessName。

一般错误

第三,代码中还有一些其他错误。我认为所有这些都在其他答案中被指出,但我会快速列出一下:

  1. if (guessName = name);这是一个无用的陈述,你必须打开一个块:if(condition) { statement; }
  2. 同一行,你做一个作业,而不是一个比较,就像说,用String你必须使用.equals()
  3. 当您考虑时,System.out.println()将不会被执行。重新阅读关于do {} while()循环的文档,直到你真正理解它们为止。
  4. 我的建议:在编写代码之前,请仔细阅读编译器的错误消息并阅读一些文档。

答案 1 :(得分:1)

有什么错误?

比较字符串时使用.equals

答案 2 :(得分:0)

您正在使用赋值运算符而非

中的等价运算符
if (guessName = name)

你需要做

if(guessName.equals(name))代替。

答案 3 :(得分:0)

您正在比较引用(好吧,guessName = name,您实际上是在为guessName赋值)。使用String.equals()代替==!=

答案 4 :(得分:0)

您正在比较两个对象。不是两个字符串值。 使用equals

答案 5 :(得分:0)

这不会编译为开始 - 您在main方法的第三行声明String guessName,然后do循环内再次声明相同的变量。您只需使用变量名称分配给它:

guessName = guess.next();

由于此错误,可能您的IDE编译器根本看不到变量,因此引用guessName的后续行也会标记为错误。修复第一行应该清除那些,除非我错过了另一个问题。

答案 6 :(得分:0)

必须使用equals方法比较字符串。

答案 7 :(得分:0)

在if:

之后有一个错误的分号
if (name.equals(guessName))  //removed the semicolon and use .equals 
   System.out.println("Right on! ");

这是一项任务而不是比较,因为其他答案现在已经说明了。

答案 8 :(得分:0)

试试这个

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! ");


        }

    }

答案 9 :(得分:0)

String guessName = guess.next();需要更改为:

guessName = guess.next();

因为“guessName”已经在之前定义过。

此外,比较字符串时,您需要使用方法equals而不是运算符==。所以} while (guessName != name);应该是:

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

并且if (guessName = name);应更改为:

if (guessName.equals(name))

答案 10 :(得分:0)

以下是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! ");
}
...

正常工作。