标记循环,继续关键字不起作用

时间:2013-10-06 20:00:32

标签: java

import java.util.Scanner;

class Details {
    int num;
    String NAMES[][];
    double MARKS[][];
    double TOTAL[];
    String GRADES[];

    void getData() {
        Scanner ob = new Scanner(System. in );
        System.out.print("Enter the number of students : ");
        num = ob.nextInt();
        NAMES = new String[num][2];
        MARKS = new double[num][4];
        for (int x = 0; x
            System.out.print("First Name : ");
            NAMES[x][0] = ob.next();
            System.out.print("Last Name : ");
            NAMES[x][1] = ob.next();
            loop1: 
            for (int p = 1; p <= 1; p++)
            {
                System.out.print("\tFirst Test Marks : ");
                MARKS[x][0] = ob.nextDouble();
                if ((MARKS[x][0] < 0) || (MARKS[x][0] > 15))
                {
                    System.out.println("Marks should be within 0 to 15");
                    continue loop1;
                }
            }
            loop2: 
            for (int p = 1; p <= 1; p++)
            {
                System.out.print("\tMid Term Marks : ");
                MARKS[x][1] = ob.nextDouble();
                if (MARKS[x][1] < 0 || MARKS[x][1] > 20)
                {
                    System.out.println("Marks should be within 0 to 20");
                    continue loop2;
                }
            }
            loop3: 
            for (int p = 1; p <= 1; p++)
            {
                System.out.print("\tLab Test Marks : ");
                MARKS[x][2] = ob.nextDouble();
                if (MARKS[x][2] < 0 || MARKS[x][2] > 15)
                {
                    System.out.println("Marks should be within 0 to 15");
                    continue loop3;
                }
            }
            loop4: 
            for (int p = 1; p <= 1; p++)
            {
                System.out.print("\tFinal Marks : ");
                MARKS[x][3] = ob.nextDouble();
                if (MARKS[x][3] < 0 || MARKS[x][3] > 50)
                {
                    System.out.println("Marks should be within 0 to 20");
                    continue loop4;
                }
            }
            System.out.println();
        }
    }
    public void total() {
        TOTAL = new double[num];
        for (int x = 0; x
            TOTAL[x] = MARKS[x][0] + MARKS[x][1] + MARKS[x][2] + MARKS[x][3];
        }
    }
    public void grades() {
        GRADES = new String[num];
        for (int x = 0; x
            if (TOTAL[x] >= 80) {
                GRADES[x] = "A";
            } else if (TOTAL[x] >= 70) {
                GRADES[x] = "B";
            } else if (TOTAL[x] >= 60) {
                GRADES[x] = "C";
            } else if (TOTAL[x] >= 50) {
                GRADES[x] = "D";
            } else {
                GRADES[x] = "F";
            }
        }
    }
    void print() {
        System.out.println("\t\t\tRESULT SHEET\n\n\tFirst Name\tLast Name\tGrade");
        for (int x = 0; x
            System.out.println("\t" + NAMES[x][0] + "\t\t" + NAMES[x][1] + "\t\t" + GRADES[x]);
        }
    }
}
class test {
    public static void main(String[] args) {
        Details data = new Details();
        data.getData();
        data.total();
        data.grades();
        data.print();
    }
}

使用continue关键字的问题,它不起作用天气我们给错了输入

4 个答案:

答案 0 :(得分:2)

我认为您不了解continue关键字的含义。您使用的continue在当前位置不会执行任何操作。以此段为例:

loop1: 
for (int p = 1; p <= 1; p++)
{
    System.out.print("\tFirst Test Marks : ");
    MARKS[x][0] = ob.nextDouble();
    if ((MARKS[x][0] < 0) || (MARKS[x][0] > 15))
    {
        System.out.println("Marks should be within 0 to 15");
        continue loop1;
    }
}

当if条件成功时,它会输出一些东西,然后继续循环loop1的下一次。无论如何,它将继续下一次迭代,因为continue关键字位于循环段的末尾。但是,由于所有for循环只运行一次,没有下一次迭代,循环停止。

也许更好的解决方案是使用这样的while循环:

while(true) {
    System.out.print("\tFirst Test Marks : ");
    MARKS[x][0] = ob.nextDouble();
    if ((MARKS[x][0] < 0) || (MARKS[x][0] > 15)) {
        System.out.println("Marks should be within 0 to 15");
    } else {
        break;
    }
}

答案 1 :(得分:0)

您的问题是您的循环长度为1:loop1: for (int p = 1; p <= 1; p++)重新输入后,p<=1的计算结果为false,退出循环。我会建议这样的事情:

        boolean firstConditionSatisfied = false;
        while (!firstConditionSatisfied) {
            System.out.print("\tFirst Test Marks : ");
            MARKS[x][0] = ob.nextDouble();
            if ((MARKS[x][0] < 0) || (MARKS[x][0] > 15)) {
                System.out.println("Marks should be within 0 to 15");
            } else {
                firstConditionSatisfied = true;
            }
        }

答案 2 :(得分:0)

我假设您不理解continue的作用,它用于跳过循环的剩余部分并重新开始。只有当你有嵌套循环并想要continue(或break外部循环)时,才需要标记循环。

(Offtopic:我建议使用名字,姓氏和标记创建一个像Student这样的新类,以便代码更容易阅读。)

答案 3 :(得分:0)

Java规则#1:如果使用标签和跳转,则代码的结构是错误的。没有例外。

因此,要解决此问题,您应该将问题更改为:“如何正确修改此代码以删除跳转?”