检查字符串是否存在于数组中

时间:2019-05-08 08:07:58

标签: java arrays boolean

我正在尝试检查数组中是否已使用名称,但它仅适用于现货[0]。 我假设它从boolean中的for循环中只能通过一次,而不会递增以检查其他点?

试图更改不同的if和while循环

if (depotCount < 4){ // Runs if the depots are less than 4
    System.out.println("Enter your depots name");
    name = console.next().toLowerCase();
    if (check(depots, name) == true){
       System.out.println("Depot name already exists");
       break;
    }
    else {
      addDepot(depots, name);   
    }              
} else { 
     System.out.println("Only 4 depots are allowed");
     break;
}
public boolean check(Depot [] depots, String name){
  boolean check = false;
  for (int i = 0; i < depots.length; i++){
     if(depots[i].getDepotName().equals(name))
       return true;
     else {
       return false;
     }
   }
  return check;

}

因此,如果名字叫“ Warehouse”是可行的,而我尝试第二次输入“ Warehouse”。 但是,如果我尝试输入与第二个插槽相同的名称,它就不会恢复为真。

5 个答案:

答案 0 :(得分:7)

您需要在for循环中删除return false;(如果放在其中),则for循环仅在索引0处运行一次。

public boolean check(Depot [] depots, String name){
      boolean check = false;
      for (int i = 0; i < depots.length; i++){
          if(depots[i].getDepotName().equals(name))
         return true;
        }
      return check;

     }

您只能像这样不带校验变量地做短。

public boolean check(Depot [] depots, String name){
       for (int i = 0; i < depots.length; i++){
              if(depots[i].getDepotName().equals(name))
             return true;
       }
       return false;
}

答案 1 :(得分:2)

问题是您总是在循环的第一次迭代中返回。

尝试如下修改您的代码:

public boolean check(Depot [] depots, String name){
  for (int i = 0; i < depots.length; i++){
    if(depots[i].getDepotName().equals(name))
      return true;

  }
  return false;
}

此外,您无需在if语句中比较true。那就是你可以改变这个:

 if (check(depots, name) == true) {

对此:

 if (check(depots, name)) {

此外,您可能想签出Java的HashMap。这些方法包括:

  • containsKey(key)检查密钥(depotName)是否存在
  • 获取(键)通过键检索记录
  • 放置(键,值)可以将值添加(放置)到地图中。
  • 没有限制(例如,您不需要像使用数组一样预先声明大小)。
  • 它们非常快-尤其是随着条目数量的增加。

对于值,可以是您喜欢的任何值。例如,它可能是包含公司地址的字符串。它可以是一个整数,其中包含该公司的雇员人数。或者,这是最好的选择,它可能是包含有关公司的所有可能细节的类的实例!

或者,如果不需要存储值,则可以始终使用KeySet,但是HashMaps可能对您更有用。

答案 2 :(得分:1)

在for循环中,您有一个“ else return false”。这是什么意思,如果您发现不相等的内容,则会立即返回false。但是,如果您在任何时候返回方法,该方法都将结束,因此不会遍历所有软件仓库

const constraints = {
  video: false,
  audio: {
    echoCancellation: false,
    noiseSuppression: false,
    autoGainControl: false
  }
}

var context = new AudioContext({
  latencyHint: 'interactive',
  sampleRate: 44100,
});

navigator.mediaDevices.getUserMedia(constraints)
  .then((stream) => {
    var source = context.createMediaStreamSource(stream);
    source.connect(context.destination);
  });

答案 3 :(得分:1)

这是因为您拥有return false;。这样就简单地结束了方法的执行(并执行了for循环),因为已将false值返回给方法调用。

public boolean check(Depot [] depots, String name){
  boolean check = false;
  for (int i = 0; i < depots.length; i++){
      if(depots[i].getDepotName().equals(name))
     return true;
    }
  return check;

 }

答案 4 :(得分:0)

我认为您应该删除else {return false; },从您的代码中:

public boolean check(Depot [] depots, String name){
  boolean check = false;
  for (int i = 0; i < depots.length; i++){
      if(depots[i].getDepotName().equals(name))
     return true;
    }
  return check;
 }