由不同语句级别引起的Java无法访问语句

时间:2013-09-23 05:47:28

标签: java unreachable-statement

我试图获得一个无限的加法计算。当我编译这段代码时,我得到无法访问的语句,我认为它是由不同的语句级别引起的。

import java.util.Scanner;
public class infiAdd {
    public static void main (String [] args ){

    int a;
    char ans;
    int c=0; 
    Scanner input;
    input=new Scanner(System.in);
    Bag: for(;;) {
        System.out.print("Please enter a number:"); 
        a=input.nextInt(); 
        Bag2:for(;;) {
        System.out.println("Do you wnat to add more ?[y/n]"); 
        ans=input.next().charAt(0); 
        while (!(ans=='y')) {
            while(!(ans=='n')){
            System.out.println("Please enter a valid answer!");
            continue Bag2;
            }
            c=c+a;
            System.out.println("The result is :"+c);
        }}


        c=a+c;

        continue Bag;}  
    }

}

无法访问的语句为c=a+c;

4 个答案:

答案 0 :(得分:1)

用户成功输入后,您没有打破外部while循环。所以这些陈述后的控制:

c=c+a;
System.out.println("The result is :"+c);

会一次又一次地到达for循环。因此,for循环后的语句无法访问,因为循环现在将无限运行。

外部while循环结束后添加break

    c=c+a;
    System.out.println("The result is :"+c);
}  // While loop ends
break;

顺便说一句,通过拥有无限for个循环,你的任务太复杂了。您应该阅读loop之外的第一个数字,然后添加while循环以阅读来自用户的更多输入:

System.out.print("Please enter a number:"); 
a=input.nextInt();

while (true) {
    System.out.println("Do you want to add more: [y/n]");
    ans=input.next().charAt(0);

    if (ans == 'n' || ans == 'N') break;
    if (ans == 'y' || ans == 'Y') {
        System.out.print("Please enter a number:"); 
        int c = input.nextInt();
        a += c;
        continue;
    } 
    System.out.println("Please enter a valid option: [y/n]");
    continue;
}

System.out.println("The result is :"+c);

除此之外,在调用integer方法之前,您还应该验证输入是否真的是input.nextInt(),如果用户通过"abc",这将被吹嘘。对于那个使用input.hasNextInt()方法。我把这个任务交给你了。

答案 1 :(得分:0)

你正在使用无限循环。所以很明显,程序永远不会达到c = a+c;语句。

答案 2 :(得分:0)

无法访问的代码是永远不会被调用的代码。在你的代码行'c = a + c;'永远不会被调用,因为它在无限循环之外

答案 3 :(得分:0)

代码永远不会被运行,因为它是在永无止境的无限循环之后放置的。

我建议稍微缩进你的代码,在新行中总是有'}'花括号,这样你就可以看到这个问题了。

要摆脱错误,可以添加'break Bag2';在'System.out.println(“结果是:”+ c);'之类的内容之后:

public class InfiniteAdd {
    public static void main(String[] args) {

        int a;
        char ans;
        int c = 0;
        Scanner input;
        input = new Scanner(System.in);
        Bag: for (;;) {
            System.out.print("Please enter a number:");
            a = input.nextInt();
            Bag2: for (;;) {
                System.out.println("Do you wnat to add more ?[y/n]");
                ans = input.next().charAt(0);
                while (!(ans == 'y')) {
                    while (!(ans == 'n')) {
                        System.out.println("Please enter a valid answer!");
                        continue Bag2;
                    }
                }
                c = c + a;
                System.out.println("The result is :" + c);
                break Bag2;
            }

            c = a + c;

            continue Bag;
        }
    }

}

虽然我相信你的代码的基本逻辑是错误的。 有关扫描仪的一个很好的示例,请参阅:http://web.eecs.utk.edu/~bvz/cs365/examples/datacheck.html

同样作为一般惯例,您应该尝试在代码中使用这么多,while,break,continue,无限循环。