【问题标题】:Java brackets bug in SWITCH statement? [duplicate]SWITCH 语句中的 Java 括号错误? [复制]
【发布时间】:2014-03-27 22:55:12
【问题描述】:

这快把我逼疯了!我已经搜索了整个代码,但似乎无法解决这个问题。这是我的代码:

class Subtarefas {
public static void resolve (int flag, int na, Aeroporto a[], int nv, Voo v[]) {
    switch(flag) {
        //------------------------------------------------------------------
        case 3: {//Incompleto
            String mat[][] = new String [na][2];
            int count=0;
            int bigcount=0;
            int indice=0;
            int np=0;

            for (int i=0; i<na; i++) {
                if ( indexOf(np, mat, a[i].nomecidade, a[i].nomepais)== -1 ) {
                    mat[np][0]=a[i].nomecidade;
                    mat[np][1]=a[i].nomepais;
                    np++;
                }
            }

            for (int i=0; i<np; i++) {
            count=0;
                for (int j=0; j<np; j++) {
                    if (mat[i][1].equals(mat[j][1])) count++;
                }
                if (count>bigcount) {bigcount=count; indice=i;}
            }

            System.out.println(mat[indice][1] + " " + bigcount);
        }
        //------------------------------------------------------------------
        case 4: {//Feito
            String mat1[][] = new String [nv][2];
            int count=0;
            int bigcount=0;
            int indice=0;

            for (int i=0; i<nv; i++) {
                for (int j=0; j<na; j++) {
                    if (v[i].origem==a[j].cod) mat1[i][0]=a[j].nomepais;
                    if (v[i].destino==a[j].cod) mat1[i][1]=a[j].nomepais;
                }
            }

            for (int i=0; i<na; i++) {
            count=0;
                for (int j=0; j<nv; j++) {
                    if (a[i].nomepais.equals(mat1[j][0])) {
                        if (mat1[j][0].equals(mat1[j][1])) count++;
                    }
                }
                if (count>bigcount) {bigcount=count; indice=i;}
                else if (count==bigcount) {
                    int result = a[i].nomepais.compareTo(a[indice].nomepais);
                    if (result<0) {bigcount=count; indice=i;}
                }
            }

            System.out.println(a[indice].nomepais + " " + bigcount);
        }
        //------------------------------------------------------------------
        default: break;
    }
}

所以基本上我找不到这里有什么问题,我无法过滤类型 {} 括号。 这里有某种错误,因为当我使用案例 3 时,我得到两个输出,并且假设只给我 1 个(在这种情况下我只有 1 个 System.out.println)。

我发现当我使用案例 3 时,它也经历了案例 4。这不应该发生!我该怎么办?

另一种选择是可以有一个左括号 { 而没有右括号 }。但是我找不到!

你能帮帮我吗?

谢谢。

【问题讨论】:

  • 您忘记在每个 case 后添加一个 break 语句...
  • 事实上,您可能对自己说“哦,给我休息一下!”数次与它战斗。下次听你说什么。
  • 不,大约 2 周前,我开始在大学学习 Java。而且我不知道在每种情况下都必须使用中断。现在说得通了。
  • 这不是“manditory”——如果你省略它,编译器(如你所知)不会反对,并且在某些合法情况下可能会省略它。但作为一般规则,每个case 都需要一个对应的breakswitch 中的最后一个casedefault 除外)。

标签: java switch-statement


【解决方案1】:

因为需要在每个案例之后break;以避免执行其余案例,read through switch case

【讨论】:

  • 哇,我花了将近 2 个小时才发现这是一次休息;谢谢你,你救了我的工作!
  • 几乎达到 100k。如果我错过了,恭喜;)
  • 感谢 UTC 时间还有一天 :) @MadProgrammer
【解决方案2】:

你可以试试:

switch(flag) {
    case 3: //Feito
    // your code;
    break;  // This makes it stop the switch
    case 4: //Feito 
    // your code;
    break;  // put break here if more case follows  
}

【讨论】:

  • 也有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 2014-06-21
  • 2013-06-13
  • 2018-05-05
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多