对于我的编程类,我需要编写一个方法,其中代码打印速度最快,速度最快的第二个。
这就是我所拥有的:
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]);
}
}
}
如何让它只显示最快的人(最低的数字)和第二快的人(第二低的数字)。
答案 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”