好的,所以我的计算机老师要求我们制作一个简单的游戏,要求用户猜测一个粗略生成的数字,但我想更进一步,并使其在用户尝试时显示错误消息确定的事情。这里的问题是我是布尔人的新手,好吧,我在使用java.util.Scanner和booleans时遇到了一些麻烦。所以,如果有人能快速浏览一下,我会很感激。
import java.util.Scanner;
import java.util.Random;
public class MoreGuessing{
//Instantiation
Scanner reader = new Scanner(System.in);
Random number = new Random();
//Variables
int randomnumber = number.nextInt(10) + 1;
int cntr = 1;
static String decimalguessed;
String error1 = "Error001: Decimal found, please enter a whole number between 1-10." + "\n" + "Program terminated......";//Decimal portion error.
String error2 = "Please enter a positive number." + "\n" + "Program terminated......"; //Negative number error.
String error3 = "Unknown character entered." + "\n" + "Program terminated......"; //Unknown character error.
//Verifier
public static boolean verifyLetters() {
if (decimalguessed.matches("[a-zA-Z]+")){
return true;
}else{
return false;
}
}
public static void main(String [] args){
//Input and display
System.out.print("Please enter a whole number between 1-10: ");
decimalguessed = reader.nextLine();
//Process and Errors
while (decimalguessed != randomnumber) {
if (verifyLetters() != false){
System.out.println(error3);
System.exit(1);}
if (decimalguessed % 1 != 0) {
System.out.println(error1);
System.exit(1);}
if (decimalguessed < 0) {
System.out.println(error2);
System.exit(1);}
if (randomnumber != decimalguessed){
System.out.println("You've lost, please make another attempt.");}
System.out.print("Please enter a whole number between 1-10: ");
decimalguessed = reader.nextDouble();
cntr++;
}
if (cntr == 1) {System.out.println("Congratulations! You've guessed the number on your first attempt!");;
}
else {System.out.println("Congratulations! You've guessed the number, it took you " + cntr + " tries");}
}
}
答案 0 :(得分:1)
您需要解析输入。 decimalguessed
是一个字符串,因此您无法进行decimalguessed % 1
等比较。
您可以将其转换为如下整数:
int guess = 0;
try {
guess = Integer.parseInt(decimalguessed);
} catch (NumberFormatException e) {
System.out.println("Your guess was not an integer: " + e.getMessage());
System.exit(1);
}
这将处理decimalguessed
包含字母的情况,以及包含小数点/分数的情况。 decimalguessed
仍然是一个字符串,但guess
现在包含它的整数版本,因此您可以正确地将其与randomnumber
进行比较。 (你的循环之前从未退出,因为字符串永远不会= =整数)
其他一些说明:
你永远不应该:
if (condition) {
return true;
} else {
return false;
}
这总是可以简单地替换为
return condition;
答案 1 :(得分:0)
感觉你对此非常陌生。欢迎编程!
首先,在Java中,你通常不会在主函数之外拥有所有的实例化和变量,除非你要将所有东西都设置为静态。我将所有这些移动到您的main函数中,取消静态decimalguessed变量并设置您的verifyLetters函数以获取String decimalguessed的参数。检查值是否为数字也许是明智的,而不是查看它是否不是字母。有很多非数字,非字母的字符。
一旦你发现猜测是一个数字,你需要告诉java它是一个(转换它)到一个小数,然后你进一步比较那个十进制。
Darth Android也提出了一些好处,特别是关于布尔值。你应该永远不会有if / else的唯一结果是返回一个布尔值,只返回布尔值。还要避免与true / false进行比较,只需单独对函数/变量执行if,或者使用'!'对其进行否定。检查是否错误。 祝你好运!