【问题标题】:Java Array helpJava 数组帮助
【发布时间】:2011-08-02 02:21:23
【问题描述】:

我需要帮助解决我遇到的一个 Java 小问题。我有一个名为最低的数组。最低的示例条目是 [6 2 9 2 7 2 3]。

我需要做的是从数组中选择最小的数字,如果有两个或多个最小且相同的条目,我需要随机选择一个。所以在这种情况下,由于 2 是最低的,我必须随机选择条目 1、3 或 5。

我该怎么做?

【问题讨论】:

  • 这看起来像是典型的课堂作业问题。 :)
  • What I need to do is choose the lowest number from the array - 不,您需要选择一个编号最小的索引。

标签: java arrays random


【解决方案1】:

我会找到索引,将它们放入一个数组中,并生成一个介于 0 和 array.length-1 之间的随机数,然后从新数组中返回该索引。

【讨论】:

    【解决方案2】:
    int lowestIndex = 0;
    
    //Make sure we start with the biggest number possible
    int lowestValue = Integer.MAX_VALUE;  
    
    for(int i = 0; i < array.length; i++){
         if(array[i] < lowestValue){
              lowestValue = array[i];
              lowestIndex = i;
         }
    }
    

    现在lowestIndex是最小数的索引!

    现在这将始终返回第一个最低值。如果您想获得一个随机的最低值,您将创建一个数组或 ArrayList,其中所有元素的索引都与最低值相同,然后随机选择。这取决于这个数组有多大以及您希望它有多高效。如果效率没有大问题,可以在上面的代码之后这样做:

    Random rand = new Random();
    ArrayList<Integer> minIndexes = new ArrayList<Integer>();
    for(int i = 0; i < array.length; i++){
        if(array[i] == lowestValue){
              minIndexes.add(i);
         }
    }
    
    int r = rand.next(minIndexes.size());
    int randomIndex = minIndexes.get(r);
    

    现在 randomIndex 是你想要的索引!

    【讨论】:

      【解决方案3】:

      在循环中查找索引并将它们放入集合中(例如 ArrayList 最低)。然后使用 Collections.shuffle(lowest) 并选择第一个元素 minimum.get(0)。这应该可以满足您的需求。

      【讨论】:

        【解决方案4】:
        public static void main(String[] args) {
            Set<Integer> treeSet = new TreeSet<Integer>();
            treeSet.addAll(Arrays.asList(new Integer[]{6,2,9,2,7,2,3}));
            Iterator<Integer> iter = treeSet.iterator();
            if(iter.hasNext())
            {
                //the lowest value from the array
                System.out.println(iter.next());
            }
        }
        

        这样一来,迭代器开始处总会有最小值。

        【讨论】:

          【解决方案5】:
          public static void findIndexOfMinimumRandomly(List<Integer> listOfValues) {
          
              //Find minimum of values
              int minValue = Collections.min(listOfValues);
          
              //Create a list to hold indexes of Minimums
              List<Integer> indexesOfMins = new ArrayList<Integer>();
          
              //Fill list with index values
              for (int i = 0; i < listOfValues.size(); i++) {
                  if (listOfValues.get(i) == minValue) {
                      indexesOfMins.add(i);
                  }
              }
          
              //Generate Random Integer to choose one of the indexes
              int randomInt = new Random().nextInt(indexesOfMins.size());
          
              //Choose one of the indexes randomly
              int randomIndex = indexesOfMins.get(randomInt);
          
              System.out.println(randomIndex);
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-15
            • 2011-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-17
            • 2010-11-17
            • 1970-01-01
            相关资源
            最近更新 更多