我正在练习“Head First Java”一书中的这段代码,我对这里循环的定位感到很困惑。代码用于创建一种具有随机dotcom字词的游戏(例如: abc.com)占用一些数组元素。在这里,我给网络中的单词提供了数组中3到5位的位置,用户尝试猜测位置。
import java.util.Scanner;
public class RunTheGame {
public static void main(String[] args) {
MainGameClass sampleObj= new MainGameClass();
int[] location = {3,4,5};
sampleObj.setdotcomLocationCells(location);
Scanner input= new Scanner(System.in);
System.out.println("Enter your guess");
int userGuess=input.nextInt();
String answer = sampleObj.checkForDotcom(userGuess);
System.out.println(answer);
}
}
package simpleDotComGame;
public class MainGameClass {
int[] DotcomLocationCells;
int numOfHits=0;
public void setdotcomLocationCells(int[] location) {
DotcomLocationCells= location;
}
public String checkForDotcom(int userGuess) {
String result="miss";
for(int cell:DotcomLocationCells) {
if(cell == userGuess) {
result ="hit";
numOfHits++;
break;
}
} // end for loop
if(numOfHits == DotcomLocationCells.length) {
result = "kill";
System.out.println("The number of tries= "+numOfHits);
}
}
答案 0 :(得分:3)
do {
<insert code where answer result is created>
} while (!answer.equals("kill"))
upd。:但你必须覆盖equals方法才能正确使用,因为如果你看到在Object.class中声明的方法是什么,你会发现
public boolean equals(Object obj) {
return (this == obj);
答案 1 :(得分:0)
Rachna,循环将定位在以下代码周围:
Scanner input= new Scanner(System.in);
System.out.println("Enter your guess");
int userGuess=input.nextInt();
String answer=sampleObj.checkForDotcom(userGuess);
System.out.println(answer);
//For string you must use the equals
if ("kill".equals(answer)){
break;
}
之所以必须在循环内部对kill命令进行评估以打破它,并且输入不断询问用户输入直到他击中所有目标。
答案 2 :(得分:0)
这里是如何定位循环的。
String answer = "";
do{
System.out.println("Enter your guess");
int userGuess=input.nextInt();
answer=sampleObj.checkForDotcom(userGuess);
System.out.println(answer);
}
while(!answer.equals("kill"));
注意:永远不要在Java中使用==
检查字符串是否相等,除非您知道自己在做什么(除非您了解字符串常量池的概念,否则也读取)
答案 3 :(得分:0)
您可以在初始化之前声明变量:
String answer;
do {
answer = sampleObj.checkForDotcom(userGuess);
System.out.println(answer);
} while (!answer.equals("kill");
还要注意Scanner.nextInt()
的语义:如果它不能将输入解析为int(例如,它包含字母),它将抛出异常,但不会跳过无效输入。您必须使用Scanner.nextLine()
强制跳过它,否则您将获得无限循环。