我正在使用JAVA进行编码,我正试图找出如何使用一种简单的方法来结束循环,我试图将其用于高级代码。为了测试它是否有效,我制作了这段代码:
package files;
public class EndLoopWithBooleanMethod {
static boolean a = true;
public static void main(String[] args){
while(a = true){
EndLoop(a);
System.out.print(".");
EndLoop(a);
}
}
public static boolean EndLoop(boolean b){
return false;
}
}
当我创建它时,它将继续打印。即使它应该返回false并结束循环,我已经尝试更改
static boolean a = true;
到
static boolean a;
但没有区别。
我知道您可以使用break
结束循环;但我没有尝试过,因为我可以使用方法在不同的上下文中有效地结束循环。请通过显示原始代码行来纠正我,然后向我展示固定代码,这有助于我理解更多(也可以解释)。
答案 0 :(得分:1)
将方法的返回值分配给boolean a
试试这个:
while(a == true){
a=EndLoop(a);
System.out.print(".");
a= EndLoop(a);
}
即使您返回false, a=true
也会将a的值赋值为true。而是使用a==true
答案 1 :(得分:1)
第一个问题:while(a = true)
总是如此。您需要使用比较:while(a == true)
并且因为a
是一个布尔值,您可以将其写为:
while(a)
第二个问题:EndLoop
没有做任何事情。该参数似乎没用,因为Java没有通过引用传递。除非您对值执行某些操作,否则返回值将无用。我的猜测是你想要这样的东西:
public static void endLoop(){
a = false;
}
答案 2 :(得分:0)
您的问题是while(a = true)
不是比较运算符。您需要将其更改为while(a == true)
。
让a = true
设置a
等于true
。你真正的意思是"如果(a等于真)"这是a == true
。 (因为这是布尔值,你可以将它浓缩为while(a)
)
所以对你:
while(a){
EndLoop(a);
System.out.print(".");
EndLoop(a);
}
答案 3 :(得分:0)
试试这个:
package files;
public class EndLoopWithBooleanMethod {
static boolean[] a = new boolean[1];
public static void main(String[] args){
while(a[0] == false){
EndLoop(a);
System.out.print(".");
EndLoop(a);
}
}
public static void EndLoop(boolean[] b){
b[0] = true;
}
}
问题是参数是按值传递的,所以如果你想改变它们你可以做上面的技巧 - 通过将它们放在一个数组中创建对它们的引用,那么数组引用本身不会改变,只是它包含的值。
答案 4 :(得分:0)
你正在混淆一些事情:
您不会检查a
是否为true
,而是设置它。使用单个等号(=
)为变量赋值,使用double等于运算符(==
)进行比较。
while (a = true)
必须为while (a == true)
或while (a)
在方法EndLoop(boolean a)
中,您需要参考一个参数,但您不能对参数执行任何操作。您刚刚返回false
,未使用a
参数。
你应该写这样的东西:
static boolean a = true;
public static void main(String[] args) {
while (a == true) { // Or "while (a)", which is the same
System.out.print(".");
a = endLoop();
// a will be false
// and there will be no next iteration of the while loop,
// because a is not true anymore
}
}
public static boolean endLoop(/* We don't need arguments here */) {
return false;
}
我还可以提出一些建议:
endLoop()
的方法false
是没用的,您应该在break
循环中使用while
。如果您想通过一些变量检查扩展endLoop()
方法,则应重命名endLoop
。答案 5 :(得分:0)
while
循环与Java中的任何其他条件循环一样接受boolean
值作为条件,因此您只需传入a
布尔基元:
while(a){
EndLoop(a); //This will reassign the a primitive with a false literal
System.out.print(".");
}
你实际在做什么,是将true
字面值重新放到a
变量上,然后检查它,所以很明显它永远都是真的,你最终会得到一个无限循环。
要检查的第二种情况,是你的EndLoop
方法(注意方法命名,第一个字母应该是小写),应该通过参数更新其值来更新:
public static boolean endLoop(boolean b){
b = false; //It will update the a value when it is passed as an argument
}
或者只是不传递任何参数并更改a
字面值,因为它是一个类实例:
public static boolean endLoop(){
a = false;
}
答案 6 :(得分:0)
您不会将a的值(默认情况下为true)更改为false,您只需调用一个返回false的方法,但不会将此值设置为此返回值。
将您的代码更改为:
package files;
public class EndLoopWithBooleanMethod {
static boolean a = true;
public static void main(String[] args){
while(a) { //This is enough as a is a boolean, the complete thing would be
//whlie (a == true)
EndLoop(a);
System.out.print(".");
EndLoop(a);
}
}
public static void EndLoop(boolean var){
var = false; //a is set to false instead of the method returning false
}
}