1

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

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

4 回答 4

1

用户成功输入后,您不会破坏外部 while 循环。所以这些语句之后的控制:

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

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

break在外部 while 循环完成后添加一个:

    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()方法。我把这个任务留给你。

于 2013-09-23T05:53:44.537 回答
0

代码永远不会运行,因为它被置于一个永不结束的无限循环之后。

我建议您将代码缩进一点,在新行中始终使用“}”大括号,这样您就可以看到这个问题。

要消除错误,您可以添加“break Bag2;” 在 'System.out.println("The result is :" + 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、无限循环。

于 2013-09-23T06:35:11.553 回答
0

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

于 2013-09-23T05:54:40.087 回答
0

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

于 2013-09-23T05:56:57.843 回答