从数组中获取最小数字

时间:2014-11-02 02:55:36

标签: java arrays

对于我的编程类,我需要编写一个方法,其中代码打印速度最快,速度最快的第二个。

这就是我所拥有的:

import java.util.Arrays;
class Marathon { 
    public static void main (String[] arguments){ `
        `String[] names ={ 
                "Alex", "Clair", "Sarah", "Andy", "Anna", "Bob"
        }; 
        int[] times ={ 
                341, 273, 278, 329, 445, 402, 
        }; 
        for (int i = 0; i < names.length; i++) { 
            System.out.println(names[i]+ ": " + times[i]); 
        }
    }
}

如何让它只显示最快的人(最低的数字)和第二快的人(第二低的数字)。

3 个答案:

答案 0 :(得分:0)

这是找到最快跑步者的一种方法

import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
class Marathon { 
    public static void main (String[] arguments){         
        HashMap<String, Integer>namez = new HashMap<String, Integer>();
        namez.put("Alex", 341 );
        namez.put("Clair",273 );
        namez.put("Sarah",278);
        namez.put("Andy",329);
        namez.put("Anna",445 );
        namez.put("Bob",402);
        Integer min = Collections.min(namez.values());
        namez.containsValue(min);
        for (Entry<String, Integer>entry: namez.entrySet()){
            if(entry.getValue()==min){
                System.out.println(entry.getKey()+": "+entry.getValue());
                String key = entry.getKey();
            }               
        }     
    }
}

编辑:这实际上是从列表中找到最快和第二快的人的方式。它只输出他们的名字,即Clair和Sarah。我希望它有所帮助。

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
class Marathon { 
    public static void main (String[] arguments){
        HashMap<Integer, String>namez = new HashMap<Integer, String>();
        namez.put(341,"Alex");
        namez.put(273,"Clair");
        namez.put(278, "Sarah");
        namez.put(329,"Andy");
        namez.put(445,"Anna");
        namez.put(402, "Bob");
        ArrayList<Integer> timez = new ArrayList<Integer>();
        timez.add(341);
        timez.add(273);
        timez.add(278);
        timez.add(329);
        timez.add(445);
        timez.add(402);
        Collections.sort(timez);
        System.out.println(namez.get(timez.get(0)));
        System.out.println(namez.get(timez.get(1)));        
    }
}

答案 1 :(得分:0)

这可能是最紧凑的方式:

import java.util.*;

public class Main {

    public static void main(String[] args) {
        //Create the mapping:
        TreeMap<Integer, String> timeToNameMapping = new TreeMap<Integer,String>();
        timeToNameMapping.put(341, "Alex");
        timeToNameMapping.put(273, "Clair");
        timeToNameMapping.put(278, "Sarah");
        timeToNameMapping.put(329, "Andy");
        timeToNameMapping.put(445, "Anna");
        timeToNameMapping.put(402, "Bob");

        //Get the keys from the above mapping.
        //Since it is a TreeMap, the keys are sorted
        List<Integer> times = new ArrayList<>(timeToNameMapping.keySet());

        //Print the result
        System.out.println("First: " + timeToNameMapping.get(times.get(0)));
        System.out.println("Second: " + timeToNameMapping.get(times.get(1)));
    }

}

<强>输出:

First: Clair
Second: Sarah

<强>说明: 我正在使用反向映射,因为这使您可以只对所有键进行排序,然后将排序列表的前两个元素映射到TreeMap中的名称(给定运行时,上面的TreeMap将告诉您运行器的名称那个时候)。 TreeMaps已经被排序,但由于它们在Map中的键位于 TreeSet 中,因此我们不能使用索引来获取两个第一个元素。这就是我将keySet()转换为ArrayList(允许索引)的原因。

详细说明词典(地图): 通常,在使用Lists时,您可以使用get()方法获取特定元素。对于像ArrayList和LinkedList这样的列表,get()方法接受一个整数(索引值)并返回列表中该位置的元素。 地图略有不同:地图会在之间建立关联。在上面的例子中,如果我给地图键341,那么它将给我值“Alex”。因此,Map上的get()方法接受K类型的键(在本例中为Integer,但实际上它可以是任何类型的对象)并返回V类型的值(在本例中为String,但也可以是任何对象)。创建Map时确定键和值的类型(在本例中为K,V = Integer,String)。告诉地图确切使用哪种类型的概念称为泛型。

答案 2 :(得分:-1)

您希望先对数组进行排序,然后打印出数组中的前两个数组。因为它是为你的班级我不会给你你需要的代码,但我给你完美的提示你要做的就是google如何排序数组并调用前两个。 Google Keyswords“Java Sort Array”