2012-09-04 3 views
0

그래서 내가 가지고있는 것은 음료의 이름을 가진 2 차원 배열 및 가격 테스트 [이름] [가격]입니다 :2 차원 배열에서 임의의 문자열을 선택 하시겠습니까?

사용자가 자신의 최대 입력하도록 그것을 가지고 무엇 메신저하려고 노력
public static final String[][] Test = {{"vodka1","5.0"},{"vodka2","10.0"},{"vodka3","15.0"},{"vodka4","20.0"},{"vodka5","25.0"}}; 

가격은 그 다음 최대 가격보다 낮은 두 번째 배열에서 무작위로 선택됩니다.

먼저 우선 사용자의 최대 가격보다 낮은 음료수로 배열을 좁히려면 어떻게해야합니까?

private static final String[] test1 = {}; 
    test1 = (array_city.Test[i][j] <= Price); 
        randomIndex = random.nextInt(test1.length); 
        text2.setText(test1[randomIndex]); 

감사 :

이 내가 (나는 그것의 잘못을 알고 있지만 그 모든 내가 생각할 수있는) 시도 것입니다!

편집

내가 그 문자열에 다음의 setText 가격에 따라 최대로 이상으로 내 배열을 정렬 somehwere 사이의 임의의 인덱스를 구입 선택하는 가능한 한 최대 음료를 찾기 위해이 코드를 시도하고했지만 활동 페이지가 시작되면 충돌이 발생합니까? 내 코드는 다음과 같습니다.

convert = Double.valueOf(array_city.Test[c][1]); 
        // Set vodka brand 
        while(Price <= convert){ 
         c++; 
         convert = Double.valueOf(array_city.Test[c][1]); 
        } 
        final TextView text2 = (TextView) findViewById(R.id.display2); 
        randomIndex = random.nextInt(c); 
        text2.setText(array_city.Test[randomIndex][1]); 

왜 작동하지 않습니까?

최종 편집

알아 냈어 !! 일부 사소한 논리 문제로 밝혀졌으며 4 루프로 바뀌 었습니다. 모든

convert = Double.valueOf(array_city.Test[c][1]); 
        // Set vodka brand 
        for(double i = Price; i >= convert;){ 
         c++; 
         convert = Double.valueOf(array_city.Test[c][1]); 
        } 
        final TextView text2 = (TextView) findViewById(R.id.display2); 
        randomIndex = random.nextInt(c); 
+0

어레이가 가격순으로 정렬된다는 전제입니까? – eboix

+0

@eboix 나는 정확히 내가 묻는 것에 혼란스러워한다. – Hockeyman271

+1

가격이 항상 배열에서 배열 순서대로 배열 될지 물어 보는 중입니다. '[3,5,2,1,4]'가 아니라 '[1,2,3,4,5]'등등. 배열이 항상 정렬 된 경우 값의 위/아래 부분 만 무시하면됩니다. –

답변

2

첫째, 대신 그것을 String[][] 배열을 만들고, 당신이 Drink 사용자가 정의한 클래스이고 (그것을 Drink[] 배열을해야하고 String이있는 : 여기 내 코드에 무슨 짓을 이름과 float 가격이 있습니다. 가격 문자열을 이중으로 파싱하는 것에 대해 끊임없이 걱정할 필요가 없기 때문에이 정보를 사용하면 도움이됩니다 ..

배열을 가격순으로 정렬하면 의사 코드 솔루션이됩니다 최저에서 최고까지) :

  1. 먼저 구입할 수있는 가장 비싼 음료를 먼저 찾으십시오. 이진 검색을 할 수는 있지만 더 간단한 해결 방법은 인덱스 0에서 Test.length-1로 이동하여 음료가 구매할 수 있는지 여부를 확인하는 것입니다. 그렇지 않은 경우 마지막 구매 가능 음료의 색인을 중지하고 저장합니다. 구매가 가능하다면 계속 진행할 것입니다.
  2. 그런 다음 0에서 maxIndex (포함)까지 임의의 int을 생성하고 음료를 출력합니다. 예를 들어

,

(int)(Math.random()*(maxIndex+1)) 당신에게 임의의 정수를 얻을 것입니다. 배열은 반드시 분류되지 않기 때문에

편집

, 당신은 그것을 정렬 할 수 있습니다. 이렇게하려면 java.util.Arrays.sort(Object[] o, Comparator c)을 사용하여 정렬하십시오.

첫 번째 매개 변수로 Drink[]을 입력하십시오.그리고 귀하의 DrinkComparator을 두 번째로 입력하십시오. 이것은 quicksort입니다.

다음과 같이 Drink 클래스가 정의되어 있다고 가정 :

public class Drink { 

     String name; 
     double price; // You could also use floats 

     public Drink(String n, double p) { 

      price = p; 
      name = n; 
     } 
    } 

는이처럼 DrinkComparator 클래스를 만들 수 있습니다.

class DrinkComparator implements Comparator { 

     public int compare(Object o1, Object o2) { 
      if(o1.price < o2.price) { 
       return 1; 
      } 
      else if(o1.price == o2.price) { // Disregarding float imprecision 
       return 0; 
      } 
      else { // Not necessary, but here for the sake of readability. 
       return -1; 
      } 
     } 

     public boolean equals(Object o) { // I don't think you will be using this method. 
      return true; // If you run into problems, tell me. 
     } 
    } 
} 

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html

그런 다음 당신은 다음과 같이 분류합니다 :

Arrays.sort(drinks, new DrinkComparator());

drinks 물론 당신의 Drink[] 될 것이다.

+0

제 편집장을 내 주요 게시물로 보면서, 나는 당신이 제안한 것을 시도했지만 지금은 충돌이 있습니까? – Hockeyman271

+0

@ Hockeyman271 충돌시 오류 메시지가 나타 납니까? 당신의 모든 코드를 줄 수 있습니까? – eboix

+0

나는 그것을 통해 일했으며 완벽하게 작동합니다! 다시 한 번 감사드립니다! – Hockeyman271

관련 문제