我有一个简单的猜数游戏。它具有询问您是否需要提示的功能。它会将响应保存在boolean
tips
中,如图所示。
while (run) {
while (tinvalidrun){
System.out.println("Do you want any tips? y or n?");
input=in.next();
switch(input){
case "y":
System.out.println("Ok, we will tell you how close you are!");
tinvalidrun=false;
tips=true;
break;
case "n":
System.out.println("Wanna go hard eh? Well, go along!");
tinvalidrun=false;
break;
default:
System.out.println("You pressed the wrong key!\nDo you have butter fingers?");
}
}
然后我有一些代码可以生成更多变量并生成一个随机数。最后我获得猜测的用户输入并测试它:
do {
System.out.println("Enter a number: ");
guess = in.nextByte();
times++;
if (guess == gval) {
break;
} else {
System.out.println("No luck! Try again!");
if (tips=true) {
if (guess < gval) {
System.out.println("You are too low!");
}
else {
System.out.println("You are too high!");
}
}
}
我尝试将tips=true
和guess < gval
与if
放在一个&&
中但不起作用。我这样做了:
if(guess<gval && tips=true)
它要求我将=
替换为<=
或类似的东西。我尝试使用两个if
语句但是当你拒绝时,它仍会显示提示。我试着看着括号,但看起来很好。请帮忙!如果我可以对我的代码做任何简化或改进或想法,欢迎他们。
我还有更多问题。当您尝试键入整数字母时,它(显然)会崩溃。我尝试使用字符串和我的tinvalidrun
循环来避免这种情况,但我不能。有没有办法做到这一点?
谢谢! :)
答案 0 :(得分:10)
在测试tips == true
时,您需要if (guess<gval && tips)
或if (tips)
和boolean
。
=
是assignment operator,==
是equality operator。将这两者混合起来很容易,但差别很大......
你说&#34; 我尝试使用两个if语句但是当你拒绝时,它仍会显示提示。&#34;。 if
语句需要一个must have type boolean
的表达式。任何赋值表达式(即tips = true
)都将作为分配给变量的新值进行求值。来自JLS §15.26.1 Simple Assignment Operator:
在运行时,赋值表达式的结果是赋值发生后变量的值。赋值表达式的结果本身不是变量。
因此if (tips = true)
是有效的语法,因为tips = true
都一个赋值和一个boolean
表达式,因此可以在{{1}中使用}。
在您的情况下if
将tips = true
分配给true
(即使它开始为tips
),然后返回false
的新值。 tips
会看到新值(if
)并继续愉快地继续。因此,true
原来不是tips
的测试。例如,这意味着以下内容打印出true
文本:
"Oops!"
正如您所看到的,将分配和测试混为一谈通常是个坏主意。如果您在boolean tips = false;
if (tips=true){
System.out.println("Oops! This tests as true, but that isn't what we wanted");
}
/ =
/ if
表达式中使用do
,通常会出错。有时它可以帮助简洁,但通常是不好的做法。
while
无效?这是由于operator precedence。在表达式if (guess<gval && tips = true)
中,运算符优先级为if (guess<gval && tips = true)
,然后是<
,然后是&&
,因此编译器不再将=
部分评估为{tips = true
的赋值1}}提示。您可以使用括号来包含true
,但正如我上面所说,您并不真正想要分配,因此您可以忽略此详细信息†。
对于问题的最后一部分 - 如果有人输入一封信,你会说你得到一个无效的字节。我猜你得到tips = true
。
您可以使用Scanner.hasNextByte()
来测试输入是否是一个字节,然后再使用它。如果返回false,则可以使用java.util.InputMismatchException
使用和丢弃输入,打印出错误消息并再次循环。
† 根据您编写代码的方式,您可能还会看到来自eclipse的消息,例如&#34;运算符&lt; =未定义参数类型(s) )boolean,Boolean&#34;或者来自javac,例如&#34;错误:意外类型...必需:变量,找到:值&#34;。除了你的语法充分混乱之外,它们都没有告诉你多少,编译器无法解析它。
答案 1 :(得分:5)
if(tips = true)
始终为true
条件,因为此处我们true
值为tips
到if
。
首先会将提示分配为true,然后检查将在else
中执行,因此此else
部分已死和控制永远不会进入tips
部分。
如果您想检查true
是否为if(tips)
,那么您只需编写false
,如果您想检查它是否if(tips == false
,那么您应该写==
)。 =
将检查assigned,而<!DOCTYPE html>
<html>
<head>
<title>My Game</title>
<link href="assets/MyGame.css" rel="stylesheet" type="text/css"/>
<script src="https://code.createjs.com/preloadjs-0.6.1.min.js"></script>
<script src="https://code.createjs.com/tweenjs-0.6.1.min.js"></script>
<script language="javascript" type="text/javascript"
src="https://code.createjs.com/easeljs-0.8.1.min.js"></script>
<script language="javascript" type="text/javascript" src="MyGame.js"
></script>
</head>
<body>
<canvas id="demoCanvas" width="1000" height="700"></canvas>
</body>
</html>
var stage;
window.onload = function()
{
var queue = new createjs.LoadQueue(true);
queue.on("fileload", handleFileLoad, this);
queue.loadFile({id:"image", src:"assets/space.jpg"});
queue.load();
stage = new createjs.Stage("demoCanvas");
}
function handleFileLoad(event) {
// A reference to the item that was passed in to the LoadQueue
var item = event.item;
var type = item.type;
// Add any images to the page body.
if (type == createjs.LoadQueue.IMAGE) {
stage.addChild(event.result)
stage.update;
}
}
将分配值或参考。
答案 2 :(得分:4)
首先,等于运算符的测试是==
而不是=
。其次,在测试布尔值时,您不需要运算符。 if (tips) ...
就足够了。
答案 3 :(得分:4)
=
和==
是完全不同的两件事。 =
是赋值运算符,用于为变量赋值。 ==
是等号运算符,用于检查变量是否等于某个值,或等于另一个变量。
您应该使用==
代替。
答案 4 :(得分:2)
在这一行
post_id
单if(tips=true)
表示分配
这应该是
=
答案 5 :(得分:2)
一个等号用于分配(guess = in.nextByte();, tinvalidrun=false, tips=true;
,等等),RHS变量中的值为&#34; put&#34;到LHS变量。变得相等,即它们包含相同的值。要进行比较,请使用两个等号运算符,即比较运算符(foo1 == foo2
)。 several operators
答案 6 :(得分:1)
有一点变化,使用==而不是=
而不是
if (tips==true)
你会做的
{{1}}
答案 7 :(得分:1)
==
,单是分配。 if(guess < gval && tips==true)
或强>
if(guess<gval && tips)
您的代码片段不显示变量声明,也许您也会比较错误的类型。我的片段假定提示为boolean
。