Проверка, существует ли строка в массиве - PullRequest
2 голосов
/ 08 мая 2019

Я пытаюсь проверить, было ли имя уже использовано в массиве, но оно работает только для спота [0]. Я предполагаю, что из цикла 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;

}

Так что работает, если имя как «Склад», и я пытаюсь поставить «Склад» во второй раз. но если я попытаюсь поставить то же имя, что и во 2-х слотах, это не вернется как истина.

Ответы [ 5 ]

8 голосов
/ 08 мая 2019

Вам нужно удалить 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;
}
2 голосов
/ 08 мая 2019

Проблема в том, что вы всегда возвращаетесь к первой итерации цикла.

Попробуйте изменить код следующим образом:

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.То есть вы можете изменить это:

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

на это:

 if (check(depots, name)) {

Также вы можете проверить HashMap в java.У них есть такие методы, как:

  • содержит ключ (ключ), проверяет, присутствует ли ключ (имя_потока) или нет
  • get (ключ) извлекает запись по ключу
  • put (ключ, значение) позволяет вам добавлять (помещать) значения в карту.
  • ограничений нет (например, вам не нужно предварительно объявлять размер, как в случае с массивом)).
  • Они довольно быстрые, особенно когда количество записей увеличивается.

Что касается значения, то оно может быть любым.Например, это может быть строка, содержащая адрес компании.Это может быть целое число, содержащее количество сотрудников в этой компании.Или, и это лучший, это может быть экземпляр класса, содержащий все мыслимые подробности о компании!

В качестве альтернативы, если вам не нужно сохранять значение, вы всегда можете использовать KeySet,но HashMaps, вероятно, более полезны для вас.

1 голос
/ 08 мая 2019

Это потому что у вас есть 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;

 }
1 голос
/ 08 мая 2019

Внутри вашего цикла for у вас есть «else return false».что это делает, если вы находите что-то не равное, вы немедленно возвращаете false.Однако, если вы в любом случае вернетесь в свой метод, метод закончится, поэтому он не будет проходить через все депо

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;
}
0 голосов
/ 08 мая 2019

По-моему, вы должны удалить 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;
 }
...