我正在学习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! ");
}
}
我做错了什么?
答案 0 :(得分:3)
你无法比较这样的字符串。这只会比较参考文献。您必须使用equals()方法:
while (! guessName.equals(name));
一点解释:http://www.zparacha.com/java-string-comparison/
您的代码中还有另一个错误,您尝试在循环内重新声明guessName。您必须在循环之外(即do {
之前)声明guessName。
第三,代码中还有一些其他错误。我认为所有这些都在其他答案中被指出,但我会快速列出一下:
if (guessName = name);
这是一个无用的陈述,你必须打开一个块:if(condition) { statement; }
System.out.println()
将不会被执行。重新阅读关于do {} while()循环的文档,直到你真正理解它们为止。我的建议:在编写代码之前,请仔细阅读编译器的错误消息并阅读一些文档。
答案 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! ");
}
...
正常工作。