【问题标题】:java - searching value inside a multi dimensional arrayjava - 在多维数组中搜索值
【发布时间】:2014-12-04 23:58:00
【问题描述】:

我需要搜索一个数组并找到某个值,如果存在则返回true,如果不存在则返回false。

数组:

private String zonaDeInternamento[][][] = {
    {
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "0012", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"}
    },
    {
        {"Livre", "0013", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"},
        {"Livre", "Livre", "Livre", "Livre"}
    }
};

因此,如果搜索找到其中一个数字,则返回 true,如果找到“Livre”,则返回 false;

public boolean isPacienteInternado(String numeroProcesso) {
    if (isNumeroProcessoValido(numeroProcesso)) {
        for (int i = 0; i < zonaDeInternamento.length; i++) {
            for (int j = 0; j < zonaDeInternamento[i].length; j++) {
                for (int h = 0; h < zonaDeInternamento[i][j].length; h++) {
                    if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) {
                        System.out.println("O paciente com número de processo " + numeroProcesso + " está internado!");
                        return true;
                    } else {
                        System.out.println("O paciente com número de processo " + numeroProcesso + " não está internado!");
                        return false;
                    }
                }
            }
        }
    }
    return false;
}

它一直返回 false,从不进入 if 语句,返回 else 消息和 false。当 numeroProcesso 为 13 或 12 时,运行调试 if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) 返回 false。我错过了什么?

【问题讨论】:

  • 您需要迭代所有项目,然后再确定项目是否存在。删除嵌套的for 内的else 循环。
  • 那么只检查 if 语句中的一个条件
  • 我需要这个语句 if (!((zonaDeInternamento[i][j][h].equals(numeroProcesso)))) 被返回为假,并且需要它在嵌套的 for

标签: java arrays multidimensional-array


【解决方案1】:
public boolean isPacienteInternado(String numeroProcesso) {
if (isNumeroProcessoValido(numeroProcesso)) {
    for (int i = 0; i < zonaDeInternamento.length; i++) {
        for (int j = 0; j < zonaDeInternamento[i].length; j++) {
            for (int h = 0; h < zonaDeInternamento[i][j].length; h++) {
                if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) {
                    System.out.println("O paciente com número de processo " + numeroProcesso + " está internado!");
                    return true;
                }
            }
        }
    }
}
return false;}

【讨论】:

    【解决方案2】:

    您的 for 循环只进行一次迭代,因为您在第一步中返回 true 或 false。 所以删除 else 语句。

    if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) {
       System.out.println("O paciente com número de processo " + numeroProcesso + " está internado!");
       return true;
    }
    

    【讨论】:

    • 我知道删除 else 可以正常工作,但我需要 else 语句来打印消息。
    • 因此,请仅使用 System.out.println 保留您的 else 语句,并从此处删除 return 语句。
    【解决方案3】:

    您在导致错误的块末尾给出了 return false 删除底部的 return false。

    public boolean isPacienteInternado(String numeroProcesso) {
       bool value;
       if (isNumeroProcessoValido(numeroProcesso)) {
          for (int i = 0; i < zonaDeInternamento.length; i++) {
             for (int j = 0; j < zonaDeInternamento[i].length; j++) {
                 for (int h = 0; h < zonaDeInternamento[i][j].length; h++) {
                     if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) {
                         System.out.println("O paciente com número de processo " + numeroProcesso + "                 está internado!");
                        bool = true;
                    } else {
                        System.out.println("O paciente com número de processo " + numeroProcesso + " não está internado!");
                        bool = false;
                    }
                }
            }
        }
    }
    return bool;
    

    }

    【讨论】:

    • 我需要那个return语句,否则运行时会报错
    【解决方案4】:

    您只检查整个数组中的一项,如果它不等于numeroProcesso,那么您将退出循环。相反,您需要继续循环直到 1。您找到了匹配项2。您迭代了数组中的每个项目。 相反,您想要这样的东西:

    public boolean isPacienteInternado(String numeroProcesso) {
    if (isNumeroProcessoValido(numeroProcesso)) {
        for (int i = 0; i < zonaDeInternamento.length; i++) {
            for (int j = 0; j < zonaDeInternamento[i].length; j++) {
                for (int h = 0; h < zonaDeInternamento[i][j].length; h++) {
                    if ((zonaDeInternamento[i][j][h].equals(numeroProcesso))) {
                        System.out.println("O paciente com número de processo " + numeroProcesso + " está internado!");
                        return true;
                    } 
                }
            }
        }
        // let the user know that a match was not found
        System.out.println("Combinar não encontrado");
    }
    return false;
    

    }

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 2022-01-03
      • 1970-01-01
      • 2011-05-20
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多