在我的java程序中遇到未知错误
我已经做了一个Java程序-这个程序将从0到7中随机选择3个数字,我们必须猜测它们是什么。要点击所有数字,我要验证输入。如果用户输入一个大于7的数字,它将再次向number索取,同时忽略用户先前输入的数字 代码正在成功编译,但当我运行它并选择大于7的数字时,它不会提示用户输入新的数字。是什么导致了错误?我怎样才能修好它在我的java程序中遇到未知错误,java,Java,我已经做了一个Java程序-这个程序将从0到7中随机选择3个数字,我们必须猜测它们是什么。要点击所有数字,我要验证输入。如果用户输入一个大于7的数字,它将再次向number索取,同时忽略用户先前输入的数字 代码正在成功编译,但当我运行它并选择大于7的数字时,它不会提示用户输入新的数字。是什么导致了错误?我怎样才能修好它 import java.io.*; import java.util.*; import java.lang.*; class GameHelper { public
import java.io.*;
import java.util.*;
import java.lang.*;
class GameHelper {
public String getUserInput(String prompt) {
String inputLine = null;
System.out.print(prompt + " ");
try {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
inputLine = is.readLine();
if(inputLine.length() == 0) {
return null;
}
} catch(IOException e) {
System.out.println("IOException: " + e);
}
return inputLine;
}
}
class DotGame {
private int PlayerGuess;
private int NumberOfGuesses = 0;
private int[] SelectedNumbers;
private int NumberOfHits = 0;
public void setPlayerGuess(String PlayerGuess1) {
int PlayerGuess2 = Integer.parseInt(PlayerGuess1);
if(PlayerGuess2 < 8) {
PlayerGuess = PlayerGuess2;
} else {
System.out.println("enter number smaller than 8 ");
}
}
public int getPlayerGuess() {
return PlayerGuess;
}
public void setSelectedNumbers(int[] selected) {
int totalArrayValue = selected[0] + selected[1] + selected[2];
if(totalArrayValue < 21) {
SelectedNumbers = selected;
} else {
System.out.println("values in array are more than they should be ");
}
}
public String checkPlayerResult() {
boolean big = true;
NumberOfGuesses++;
String result = "miss";
for(int number : SelectedNumbers) {
if(PlayerGuess == number) {
result = "hit";
NumberOfHits++;
break;
}
}
if(NumberOfHits == SelectedNumbers.length) {
result = "killed";
}
System.out.println(result);
return result;
}
public void GameScore() {
int Score = NumberOfHits * 100 / NumberOfGuesses;
System.out.println("Number of hits " + NumberOfHits);
System.out.println("Number of guesses " + NumberOfGuesses);
System.out.println("you scored " + Score);
}
}
public class DotGameTester2 {
public static void main(String[] args) {
GameHelper helper = new GameHelper();
int random = (int) (Math.random() * 7);
int random1 = (int) (Math.random() * 7);
int random2 = (int) (Math.random() * 7);
DotGame game = new DotGame();
int[] selectnumb = { random, random1, random2 };
boolean isAlive = true;
int numOfGuesses = 0;
int test = 0;
game.setSelectedNumbers(selectnumb);
while(isAlive == true) {
do {
String guess = helper.getUserInput("enter a number ");
game.setPlayerGuess(guess);
test = game.getPlayerGuess();
} while(test > 8);
String result1 = game.checkPlayerResult();
numOfGuesses++;
if(result1 == "killed") {
isAlive = false;
}
}
System.out.println("you took " + numOfGuesses + " to guess");
game.GameScore();
}
}
import java.io.*;
导入java.util.*;
导入java.lang.*;
类游戏助手{
公共字符串getUserInput(字符串提示){
字符串inputLine=null;
系统输出打印(提示+“”);
试一试{
BufferedReader is=新的BufferedReader(新的InputStreamReader(System.in));
inputLine=is.readLine();
如果(inputLine.length()==0){
返回null;
}
}捕获(IOE异常){
System.out.println(“IOException:+e”);
}
返回输入线;
}
}
类网络游戏{
私人int PlayerGuess;
私有int NumberOfGuesses=0;
私有int[]选择的数字;
私有int NumberOfHits=0;
public void setPlayerGuess(字符串PlayerGuess1){
int PlayerGuess2=Integer.parseInt(PlayerGuess1);
如果(PlayerGuess2<8){
PlayerGuess=PlayerGuess2;
}否则{
System.out.println(“输入小于8的数字”);
}
}
public int getPlayerGuess(){
返回PlayerGuess;
}
公共无效设置所选编号(int[]已选){
int totalArrayValue=选定的[0]+选定的[1]+选定的[2];
if(总阵列值<21){
SelectedNumbers=已选择;
}否则{
System.out.println(“数组中的值超出了应有的值”);
}
}
公共字符串checkPlayerResult(){
布尔大=真;
NumberOfGuesses++;
字符串result=“miss”;
对于(整数编号:SelectedNumber){
如果(PlayerGuess==数字){
结果=“命中”;
NumberOfHits++;
打破
}
}
if(NumberOfHits==SelectedNumbers.length){
结果=“死亡”;
}
系统输出打印项次(结果);
返回结果;
}
公开作废游戏分数(){
int分数=NumberOfHits*100/NumberOfGuesses;
System.out.println(“点击次数”+点击次数);
System.out.println(“猜测次数”+猜测次数);
System.out.println(“你得分”+得分);
}
}
公共类DotGameTester2{
公共静态void main(字符串[]args){
GameHelper helper=新GameHelper();
int random=(int)(Math.random()*7);
int random1=(int)(Math.random()*7);
int random2=(int)(Math.random()*7);
DotGame=新的DotGame();
int[]selectnumb={random,random1,random2};
布尔值=真;
int numOfGuesses=0;
int检验=0;
游戏。设置所选号码(选择Numb);
while(isAlive==true){
做{
字符串guess=helper.getUserInput(“输入一个数字”);
game.setPlayerGuess(猜测);
test=game.getPlayerGuess();
}而(试验>8);
String result1=game.checkPlayerResult();
numOfGuesses++;
如果(结果1==“终止”){
isAlive=假;
}
}
System.out.println(“您使用“+numfoguesses+”进行猜测”);
game.GameScore();
}
}
应该是
while(test >= 8)
此外,当您插入一个大于7的数字时,您仍然会将先前插入的数字返回到test
,因此您检查的数字是错误的
要解决此问题,我将编辑以下内容:
PlayerGuess = PlayerGuess2;
if (PlayerGuess2 < 8) {
System.out.println("enter number smaller than 8 ");
}
do {
game.resetGuess();
String guess = helper.getUserInput("enter a number ");
game.setPlayerGuess(guess);
test = game.getPlayerGuess();
} while (test >= 8);
并在
resetGuess()中实现PlayerGuess=8
您的错误:如果用户的猜测大于7,则game.setPlayerGuess
不会设置数字,因为方法中存在“如果”。然后,调用game.getPlayerGuess()
,基本上得到了之前输入的有效数字
如前所述-无论如何,这是一个糟糕的设计 如果您输入11
作为猜测,会发生以下情况:
String guess = helper.getUserInput("enter a number "); // guess == 11
game.setPlayerGuess(guess /* 11 */);
钻入setPlayerGuess
:
if(PlayerGuess2 < 8) { // False, since 11 > 8
PlayerGuess = PlayerGuess2; // skip
} else { // True
System.out.println("enter number smaller than 8 "); // This line gets executed
}
这只返回PlayerGuess
,即0
现在,您在while
循环中运行此操作,该循环在test>8
时执行,但现在,test
为0
,因此循环终止
修复方法是将setPlayerGuess
更改为该值,因此每次输入数字时都设置猜测:
public void setPlayerGuess(String PlayerGuess1) {
int PlayerGuess2 = Integer.parseInt(PlayerGuess1);
PlayerGuess = PlayerGuess2;
if(PlayerGuess2 >= 8) {
System.out.println("enter number smaller than 8 ");
}
}
现在,当您输入一个大于7
的数字时,系统会再次提示您。到底什么不起作用?此外,请格式化代码以使其更可读。if(result1==“killed”)
。不要使用==
比较字符串。使用equals()
。这真是糟糕的设计。您需要保护您的数据并将其保存在适当的位置。例如,您有numOfGuesses
和NumberOfGuesses
这两个选项,它们都独立跟踪猜测的数量(我可能会添加错误)。而且从来没有使用过NumberOfGuesses
。这当然是正确的,但它并没有修复所讨论的bug。@DesertIvy,因为这个问题涉及多个bug。不管怎样,我更新了我的答案。有人对这个答案投了否决票,没有评论为什么。有趣的是,被接受的答案和这个答案完全一样!
test = game.getPlayerGuess();
public void setPlayerGuess(String PlayerGuess1) {
int PlayerGuess2 = Integer.parseInt(PlayerGuess1);
PlayerGuess = PlayerGuess2;
if(PlayerGuess2 >= 8) {
System.out.println("enter number smaller than 8 ");
}
}