2013-11-20 2 views
0

안녕 얘들 아 객체 배열을 조사하는 데 문제가 있습니다. 간단히 말해 나는 어떻게해야할지 모른다. 내 코드는 다음과 같습니다객체 배열을 통해 문제를 해결하는 중

import java.util.Scanner; 
public class CalorieCalculator { 

public static void main(String[] args) { 
    Scanner letterInput = new Scanner(System.in); 
    Calories[] array = {new Calories("spinach", 23), new Calories("potato", 160), new Calories("yogurt", 230), new Calories("milk", 85), 
      new Calories("bread", 65), new Calories("rice", 178), new Calories("watermelon", 110), new Calories("papaya", 156), 
      new Calories("tuna", 575), new Calories("lobster", 405)}; 
    System.out.print("Do you want to eat food? "); 
    String answer = letterInput.nextLine(); 
    while (!answer.equalsIgnoreCase("no") || !answer.equalsIgnoreCase("n")){ 
    if (answer.equalsIgnoreCase("Y") || answer.equalsIgnoreCase("yes")){ 
     System.out.print("What kind of food would you like?"); 
     String answer2 = letterInput.nextLine(); 

     } 


      }//end if 

     }//end while loop 
    }//end main method 

}//end CalorieCalculator class 



class Calories{ 
private String name; 
private int calorie; 


Calories(String name, int calorie){ 

    this.name = name; 
    this.calorie = calorie; 

} 

public int getCalorie(){ 
    return this.calorie; 
} 

public String getName(){ 
    return this.name; 
} 

}

내가 배열의 요소에 문자열 첫 번째 인수를 찾기 위해 노력하고있어. 예를 들어 누군가 시금치를 입력하면 시금치 키워드를 찾고 시금치의 칼로리 인 두 번째 인수도 반환하려고합니다.

+1

"간단히 말해서 나는 어떻게해야할지 모르겠다." 어떻게 ... 뭘? –

+0

@CyrilleKa 특정 인수를 찾기 위해 객체 배열을 정렬하는 방법 – user3002906

+2

루프하는 법을 이미 알고있는 것처럼 보입니다. 따라서 배열의 모든 객체를 반복합니다. 매 반복마다 현재 칼리 객체의 이름이 사용자가 입력 한 문자열과 같은지 테스트합니다. 그럴 경우 칼로리 필드를 인쇄하십시오. –

답변

0

: 모든이가하는

for(int i = 0; i < array.length; i++) { 
    if(array[i].getName().equals(answer2)) { 
     return array[i].getCalorie(); 
    } 
} 

은 다음과 같습니다

Calories[] array; 
String answer2; 

이것은 내가 "ANSWER2"에 의해 명명 된 음식을 일치하는 칼로리를 찾을 것이라고 어떻게 음식의 배열을 반복하고, 사용자로부터의 입력을 각 음식의 이름과 비교합니다. 일치하는 것이 발견되면 발견 된 음식의 칼로리를 반환합니다.

첫째
public Calories findCaloriesForFood(String food) { 
    for (Calories calories : array) { 
     if (calories.getName().equalsIgnoreCase(food)) { 
      return calories; 
     } 
    } 
    return null; 
} 
0

요소의 배열이있어서 사용자가 입력 한 것과 일치하는 이름을 가진 요소 (인스턴스 Calories)를 찾으려고합니다.

for-loop를 사용하면 배열을 통과하여 각 이름과 비교하는 데 도움이됩니다. 문제가 있으면 여기에 게시하십시오. 우리는 당신을 더 도울 수있을 것입니다. 코드에서이 두 가지 변수를 감안할 때

0

array 변수를 감안할 때,이 방법은 당신이 원하는해야한다. N이나 NO가 아닌 모든 입력에 대해 "WHILE"루프 검사를 시작한 다음 Y 또는 예를 확인하기 때문에 시작한다고합니다. 대신 while 루프에서 Y 또는 Yes를 확인하는 것이 좋습니다. 따라서이 경우 Y 또는 예를 입력하고 다른 모든 텍스트 입력을 종료하면 원하는 음식 만 묻습니다.

둘째,

1 차원 배열을 사용하고 있습니다. 따라서 배열에 각 추가는 인덱스와 함께 저장됩니다. 귀하의 경우 인덱스 0은 시금치를, 감자는 1을 감자 등입니다. 따라서 배열에서 객체를 검색하려면 색인을 지정하고 가져와야합니다. 일단 객체를 가져 오면 그 객체의 값을 가져 오기 위해해야 ​​할 일은 getter 메소드를 사용하는 것입니다. 귀하의 경우 논리는 배열을 반복하고 각 이름을 입력 텍스트와 대조하여 일치 항목을 찾으면 필요한 객체를 찾습니다.

+0

방금 ​​배열이 정적 멤버 또는 클래스 변수라고 가정합니다. –

+0

그렇지 않습니다. 범위는'main()'에 있습니다. – SimplyPanda

0

,

귀하의 while 루프와 루프가 가지 중복 된 경우 :

0

내가 이런 경우에 할 일은 Food라는 "열거 형"을 사용하는 것입니다.

public enum Food 
    { 
      SPINACH(23), 
      ... 
      LOBSTER(405); 

      private int calories; 

      private Food(int pCalories) 
      { 
       calories = pCalories; 
      } 

      public int getCalories() 
      { 
       return calories; 
      } 
    } 

당신은 다음과 같은 특정 음식에 대한 칼로리를 조회 할 수 있습니다

String selectedFoodString = answer2; 
Food selectedFood = Food.valueOf(selectedFoodString); 
int selectedCalories = selectedFood.getCalories(); 

지도를 사용하는 것이 작업을 수행하는 또 다른 방법. 음식의 이름은 "핵심"이고 칼로리는 "가치"입니다. Map은 Enum처럼 쉽게 조회 할 수 있습니다. 차이점은 스타일과 목록이 얼마나 동적인지 파악하는 것입니다. 목록이 변경되지 않으면 열거 형이 적합합니다.동적으로 목록을로드해야하는 경우지도가 더 좋을 수 있습니다.

관련 문제