我已经搜索了所有关于找到数组中最小数字的问题;但是,我找不到任何具有与单独的String数组关联的数组的示例。我有两个数组,一个是名字数组,第二个是数组(int)。我想要一个显示最短时间的结果以及那个时间实现的结果。
这是我必须使用的骨架:
class Marathon {
public static void main (String[] arguments){
String[] names ={"Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", "Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", "Aaron", "Kate"
};
int[] times ={341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299,343, 317, 265
};
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + ": " + times[i]);
}
}
}
我能够编写一些东西以获得最短的时间:
public class Test {
public static void main (String[] args) {
String[] names = new String[] {"Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", "Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", "Aaron", "Kate"
};
int[] times = new int[]{ 341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265
};
int win = times[0];
for(int i=0; i< names.length; i++) {
if (times[i] < win)
win = times[i];
}
System.out.println("names[i]" + ": " + win);
}
}
// result "names[i]: 243
但似乎无法找到显示相关名称的方法(所以我甚至不知道这段代码是否会让我更接近或更进一步)。我最接近的是尝试继续循环...但它只与时间[0]直接比较,我收到的结果都低于341。
public class Marathon {
public static void main (String[] args) {
String[] names = new String[] {"Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", "Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", "Aaron", "Kate"
};
int[] times = new int[] {341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265
};
for (int i = 1; i < names.length; i++) {
if (times[i] >= times[0]) continue;
System.out.println(names[i]+ ": " + times[i]);
}
}
}
//Result:
//"Thomas: 273
//Hamilton: 278
//Suzie: 329
//Emma: 275
//John: 243
//James: 334
//Daniel: 299
//Aaron: 317
//Kate: 265"
我还试图与时间[i ++]进行比较,导致错误,并且不确定与整个数组进行比较的另一种方式,并保持名称与正确的时间相关联(我找到了很多方法来解除正确的关联名称和时间)。如何将正确的名称与最短的时间关联起来。下一阶段也将向亚军展示;但是,我希望一旦我获得第一名的人和时间,我就能弄清楚...我发现的唯一的例子只涉及一个数组,多数组的东西似乎已经把我抛出了一个循环!
答案 0 :(得分:1)
在数组中找到最小值:
int[] array ...
int min = Integer.MAX_VALUE;
int index = -1;
for (int i=0 i<array.length; i++){
if (array[i] > min){
index = i;
min = array[i];
}
}
System.out.println(names[index]);
答案 1 :(得分:1)
真正的答案
停止使用小丑解决方案并开始使用对象。
创建一个包含名称和时间的对象。
停止使用数组。
将新对象类型存储在List中(LinkedList可能没问题,如果需要随机访问List,请使用ArrayList。)
你想要的答案 使用两个数组存储关于一个项目的相关数据是一个很好的解决方案。 找到最短时间和相关名称的简单解决方案:
答案 2 :(得分:0)
使用变量min
将索引存储在times[]
中,其值最低。迭代数组times
一次,因为这决定了判断。在迭代过程中,检查times
中的当前元素是否小于索引min
中的当前元素。如果是,请将当前索引分配给min
。
int min = 0;
for(int i=0; i<times.length; i++){
if(times[i] < times[min])
min = i;
}
System.out.println("Lowest time is of "+names[min]+
", the time being "+times[min]);
输出:
Lowest time is of John, the time being 243
答案 3 :(得分:0)
假设您的名称数组的索引与您的时间数组的索引相关联
public static void main (String[] args) {
String[] names = new String[] {"Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", "Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", "Aaron", "Kate"
};
int[] times = new int[]{ 341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265
};
int win = times[0];
int winningIndex = 0;
for(int i=0; i< names.length; i++) {
if (times[i] < win){
win = times[i];
winningIndex = i;
}
}
System.out.println(names[winningIndex] + ": " + times[winningIndex]);
// result "John: 243
}
答案 4 :(得分:0)
您可以将名称和时间放在一个类中,创建对象并将其放在ArrayList
中,然后根据time
对其进行排序。以下面的代码为例。
public static void main(String[] args) {
List<Node> list = new ArrayList<>(Arrays.asList(new Node("Elena", 341),
new Node("Thomas", 273), new Node("Hamilton", 278)));
Collections.sort(list);
for (Node node : list) {
System.out.println(node.name + " " + node.time);
}
}
// Implement Comparable or pass Comparator interface.
// here I have used implementing interface. :)
static class Node implements Comparable<Node> {
String name;
int time;
Node(String name, int time) {
this.name = name;
this.time = time;
}
@Override
public int compareTo(Node o) { // will sort based on time
return Integer.compare(this.time, o.time);
}
}
采用Java 8风格,
list.stream()
.sorted()
.forEach(i -> System.out.println(i.name + " " + i.time));
答案 5 :(得分:0)
试试这个
String[] names = new String[] { "Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", "Emma", "John", "James", "Jane", "Emily",
"Daniel", "Neda", "Aaron", "Kate" };
int[] times = new int[] { 341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 343, 317, 265 };
int minIndex = IntStream.range(0, times.length).boxed().min((a, b) -> times[a] - times[b]).get();
System.out.println(minIndex + " " + times[minIndex] + " " + names[minIndex]);
TreeMap<Integer, String> sortedMap = IntStream.range(0, times.length).collect(TreeMap<Integer, String>::new,
(map, i) -> map.put(times[i], names[i]), Map::putAll);
System.out.println(sortedMap.firstEntry());
输出
8 243 John
243=John