Java编程,如何打破无限循环?

时间:2015-10-16 13:46:21

标签: java cycle

我有这个程序用于我的学习,但我无法找到如何结束这个循环。你能帮助我吗?我无法真正找到如何退出这个循环,我不能在使用函数时使用并且不允许使用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");
    }
}

3 个答案:

答案 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)