2016-12-05 2 views
0

지난 몇 시간 동안 나 혼자서 이것을 알아 내려고 노력했지만 계속되었습니다.자바의 배열 요소를 찾아서 반환합니다.

나는 사람의 이름, 나이, 높이 (단위 cm) 목록이있는 배열이 있습니다. 그 사람의 이름 만 매개 변수로 사용하고 배열의 이름을 검색하는 메서드를 만들고 싶습니다. 일치하는 이름이없는 경우는 null을 리턴합니다. 나는 그것이 옳지 않다 알고

public data findData(String name) { 
    for (int i = 0; i < numberData; i++) { 
     if (name == data[i]) { 
      return data[i]; 
     } else { 
      return null; 
     } 
    } 
} 

.. 내가 지금까지 노력했습니다 무엇

data = new data[50]; 
data[0] = new data("Dan", 23, 179); 
data[1] = new data("David", 20, 180); 
data[2] = new data("Sharon", 19, 162); 
data[3] = new data("Jessica", 22, 160); 
data[4] = new data("Nancy", 25, 164); 
... 
numberData = 30; // this is the number of people that are in this array so far 

이,하지만 난 찾을 수 없습니다 :

은 다음과 같습니다 해결책. 어떤 아이디어?

+0

name.equals (데이터 [I]) - 참조 할 : http://stackoverflow.com/questions/513832/how-do- i-compare-strings-in-java –

+2

'data' 클래스를 보여주십시오. 또한 대개 대문자로 된 첫 번째 문자로 클래스를 호출합니다. 마지막으로 'data'라는 배열과'data'라는 클래스가있을 때 꽤 오해의 소지가 있습니다. – Berger

+1

대신 배열의 'length' 속성을 사용하거나'numberData' 변수를 사용해야합니다. – AntoineB

답변

-2

return null 문을 루프 밖으로 이동하십시오. 오! 예, ==

-1

문자열을 비교하려면 equals() 메서드를 사용해야합니다. equals()는 문자열의 실제 내용을 검사합니다. ==은 객체 참조가 동일한 지 확인합니다.

또한 위에 언급 한 것처럼 루프 외부로 return null을 이동하십시오.

0
  1. 루프가 적어도 한 번 실행되지 않는 경우 반환 값이 누락되었습니다.
  2. ==은 참조를 비교합니다. equals은 문자열을 비교합니다.
  3. Return null 경우에 따라서는 배열에 이러한 요소가 없습니다.
  4. 클래스 이름은 대문자로 시작해야합니다. data 대신 Data을 작성하십시오.

코드 :

public Data findData(String name) { 
    for (Data d : data) { 
     if (name.equals(d.getName())) { 
      return d; 
     } 
    } 
    return null; 
} 

은 당신이 찾고있는 것입니다. 원래 코드에서 0 요소가 name이 아닌 경우 null이 반환되었습니다.

OK, 상기 짧은 수정 이제 어떤 이론이었다

배열 선형 검색을위한 의사 코드 :

  • 루프 어레이의 모든 요소들을. 찾고있는 것과 일치하는 항목이 있으면 반환하십시오.
  • 아무 것도 반환되지 않은 경우 표시 값 (여기서는 null)을 반환합니다.

봐 원래 코드에서 0 번째 요소에 해당 요소 또는 null을 반환할지 여부를 결정했다. 또한 루프가 적어도 한 번 실행되지 않은 경우 반환 할 명령문이 없습니다.

0

배열은 이름 매개 변수가있는 Data 클래스를 참조하므로 데이터 참조와 직접 비교하지 않는 이름 매개 변수와 비교해야하며 문자열 비교는 항상 equals() 메소드로 이동해야합니다.

public Data findData(String name) { 
    for (int i = 0; i < numberData; i++) { 
     if (name.equals(data[i].getName())) { 
      return data[i]; 
     } 
    } 
    return null; 
} 
-1

다음 코드를 사용할 수 있습니다. 데이터 클래스에 이름 값을 반환하는 getName() 메서드가 있다고 가정합니다. 문자열을 비교하는

public data findData(String name) { 
for (int i = 0; i < numberData; i++) { 
    if (name.equals(data[i].getName())) { 
     return data[i]; 
    } 
} 
return null; 
} 
0

사용 equals(),
예를 들어, 당신이 문자열을 비교하려는 때문에

if(name.equals(data[i].getName())) { 
    statements... 
} 
0

당신은 방법을 동일 사용해야합니다. 여기

어떻게 자바 (8)를 사용하는 예이다 :

public Data findData(Data[] datas, String name) { 
    return Arrays.stream(datas).filter(data -> data.getName().equals(name)).findAny().orElse(null); 
} 
관련 문제