我有这个程序用于我的学习,但我无法找到如何结束这个循环。你能帮助我吗?我无法真正找到如何退出这个循环,我不能在使用函数时使用并且不允许使用break函数
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Ld2141reb130 {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
double g=9.81, a=40;
a = Math.toRadians(a);
double t, x = 0, y=0, v0;
boolean hitTarget=false;
String s;
System.out.println("Artūrs Škutāns IRDBF1 000RDB111");
try {
System.out.print("v0=");
s = br.readLine();
v0 = Double.parseDouble(s);
} catch(Exception e){
System.out.println("input-output error");
return;
}
System.out.println("t \t x \t y");
t = 0.05;
while (hitTarget=true) {
x = v0*t*Math.cos(a);
y = v0*t* Math.sin(a) - (g*t*t)/2;;
System.out.printf("%3.2f\t%7.3f\t%7.3f\n", t, x, y);
if (x>=15 && x<=18 && y<=6 && y>4) {
hitTarget = true;
}
t += 0.05;
}
while ( y>=0 || x>=10 && y>=4 );
if (hitTarget)
System.out.println("the target was destroyed");
else
System.out.println("shot off the target");
}
}
答案 0 :(得分:1)
你的问题在于
while (hitTarget=true) {
这会将hitTarget指定为true,然后检查它是否为true(这是)
更改为
while (hitTarget==true) {
甚至更好
while (hitTarget) {
但是,因为你从hitTarget开始为false,你可能想要将你的hitTarget声明更改为true或者将你的循环更改为do,而是至少获得一次执行,并且还有一些条件,其中hotTarget将被设置为false。
然后你有一个空循环
while ( y>=0 || x>=10 && y>=4 );
如果您输入它将是一个无限循环(因为它不会改变任何状态)
也许你想要像
这样的东西do {
x = v0*t*Math.cos(a);
y = v0*t* Math.sin(a) - (g*t*t)/2;;
System.out.printf("%3.2f\t%7.3f\t%7.3f\n", t, x, y);
if (x>=15 && x<=18 && y<=6 && y>4) {
hitTarget = true;
}
t += 0.05;
} while (hitTarget || y>=0 || x>=10 && y>=4 );
答案 1 :(得分:1)
那里有两个明显的错误:
a)写while (hitTarget)
或while (hitTarget == true)
(您在代码中拥有的内容将值设置为true to hitTarget;直接将代码转换为while(true)
)
最重要的是:
b)你需要循环中的某些内容将hitTarget
的值更改为false
换句话说:你指示你的循环永远运行;然后你想知道为什么它永远不会停止?
最后:考虑将代码分解为更小的方法。会让阅读和理解变得更加容易。
答案 2 :(得分:0)
我打赌,当hitTarget设置为true时,你想结束循环。要结束该循环,您必须检查hitTarget != false
:
while (hitTarget != false)
或简单地说:
while (!hitTarget)