0

所以我有一个二维数组,其中包含饮料的名称和价格 Test[Name][Price]:

    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 设置为该字符串,但是当活动页面启动时它崩溃了?这是我的代码:

    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]);

为什么这不起作用?

最终编辑

弄清楚了!!原来是一些小逻辑问题,改成四循环,效果很好!!这是我对我的代码所做的:

    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);
4

1 回答 1

2

首先,不要将其String[][]设为数组,而应将其Drink[]设为数组(Drink您已定义的类在哪里,并且具有String名称和float价格。这将帮助您使用信息,因为您不会拥有不断担心将价格字符串解析为双倍。

如果数组按价格排序(从最低到最高),这是一个伪代码解决方案:

  1. 首先找到您仍然可以购买的最昂贵的饮料。你可以对它进行二分搜索,但更简单的解决方案是从索引 0 到 Test.length-1 检查饮料是否可以购买。如果没有,您将停止并存储最后可购买的饮料的索引。如果它是可购买的,你会继续。
  2. 然后,您将生成一个int从 0 到maxIndex(含)的随机数,并输出 Drink。

例如,

(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班级像这样。

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

    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.
         }
    }
}

然后你会这样排序:

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

drinks当然是你Drink[]的。

于 2012-09-04T20:51:34.763 回答