我是Java的新手,并且已经获得了一个要求的任务:
描述
一群朋友决定参加波士顿马拉松比赛。他们的名字和时间(以分钟为单位)如下:
Name Time(minutes)
Elena 341
Thomas 273
Hamilton 278
Suzie 329
Phil 445
Matt 402
Alex 388
Emma 275
John 243
James 334
Jane 412
Emily 393
Daniel 299
Neda 343
Aaron 317
Kate 265
找到最快的跑步者。打印姓名和他/她的时间(以分钟为单位)。
找到第二快的跑步者。打印姓名和他/她的时间(以分钟为单位)。
说明
编写一个方法,将整数数组作为输入,并返回对应的索引 时间最短的人。在数组上运行此方法。打印出名称和时间 对应于返回的索引。 写第二种方法来找到第二好的跑步者。第二种方法应该使用第一种方法 确定最佳跑步者,然后遍历所有值以找到次佳(第二低) 时间。 这是一个入门的程序框架:
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
};
int i1 = fastestIndex(times);
int i2 = secondFastestIndex(times);
//
// your output based on the index i1 and i2
//
}
// your two Java methods:
// fastestIndex() and secondFastestIndex()
}
我写了一个程序打印第一和第二位的时间和名字,但现在我开始认为我没有正确地按照说明。谁能帮助我弄清楚我应该做些什么呢?
这是我的业余代码:
public class Lab
{
public static void main(String[] args)
{
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
};
int firstplace = times[0];
String firstname = names[0];
int secondplace = times[0];
String secondname = names[0];
for (int counter = 0; counter < times.length; counter++)
{
if (times[counter] < firstplace) {
firstplace = times[counter];
firstname = names[counter]; }
}
for (int counter = 0; counter < times.length; counter++)
{
if (times[counter] > firstplace)
if (times[counter] < secondplace) {
secondplace = times[counter];
secondname = names[counter]; }
}
System.out.printf("The fastest runner is: %s (%d Minutes)%n", firstname, firstplace);
System.out.printf("The second fastest runner is: %s (%d Minutes)%n", secondname, secondplace);
} // end main
} // end class Lab
这就是它打印的内容:
The fastest runner is: John (243 Minutes)
The second fastest runner is: Kate (265 Minutes)
答案 0 :(得分:2)
由于这是一项任务,我无法告诉您确切的代码,但这是您可以做的。 将代码分解为执行特定任务的函数是一个更好的主意,这就是您的入门代码所说的。您需要编写两个函数fasterIndex和secondFastestIndex。 fastIndex是应该返回最快的索引的函数,secondFastestIndex应该返回第二个最快的索引,所以只需构造你的代码,以便执行speedIndex任务的代码在相应的方法中(你可以通过移动当前片段来实现)代码的新方法)和secondFastestIndex相同,然后从main方法调用它们。 这是我能解释的最好的。基本骨架应该是这样的:
void main() {
// do some task;
// call fastestIndex;
// call secondFastestIndex;
}
int fastestIndex() {
// code
int firstplace = times[0];
String firstname = names[0];
for (int counter = 0; counter < times.length; counter++)
{
if (times[counter] < firstplace) {
firstplace = times[counter];
firstname = names[counter]; }
}
// return stuff
}
//Same for secondFastestIndex
只需要重新构建像骨架一样的代码,你就可以了。 还要确保从secondFastestIndex调用fasterIndex以避免冗余并完全按照说明进行操作。
答案 1 :(得分:0)
是的,你很大程度上错过了问题的指导。
第二种方法应该使用第一种方法来确定最佳跑步者,然后循环遍历所有值以找到次佳(第二低)时间。
这显然意味着secondFastestIndex()
应首先调用fastestIndex()
,然后使用返回的值来评估第二快的跑步者,我在您的代码中看不到。这是应该满足它的实现类型:
int secondFastestIndex(){
//...
fastestRunnerIndex = fastestIndex()
//Run loop again on the array and ignore the fastestRunnerIndex while finding the smallest number in it.
return secondFastestRunnerIndex;
}
答案 2 :(得分:0)
好吧,你想要的完整答案就是:
您的老师会为您提供有关如何解决此问题的特定伪代码,您应该遵循它。
编写一个方法,将整数数组作为输入,并返回与时间最短的人对应的索引。
就是这样:public static int fastestIndex(int[] times){...}
它是static
,因为它不是实例方法(意味着你不必创建一个对象实例来调用它)
,第二个也有相同的签名
public static int secondFastestIndex(int[] times)
并在其内部调用第一个方法来帮助找到第二快的索引
然后你打印两个。
这是完整的代码
public class Lab
{
public static void main(String[] args)
{
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
};
int win = fastestIndex(times);
int second = secondFastestIndex(times);
System.out.printf("The fastest runner is: %s (%d Minutes)%n", names[win], times[win]);
System.out.printf("The second fastest runner is: %s (%d Minutes)%n", names[second], times[second]);
} // end main
public static int fastestIndex(int[] times)
{
int fastestIndex = 0;
for (int counter = 0; counter < times.length; counter++)
{
if (times[counter] < times[fastestIndex])
{
fastestIndex = counter;
}
}
return fastestIndex;
}
public static int secondFastestIndex(int[] times)
{
int fastestIdx = fastestIndex(times);
int secondFastestIdx = 0;
for (int counter = 0; counter < times.length; counter++)
{
//you search for the fastest, but you ignore it if it is
// equal to the fastest index (so you are really finding the 2nd)
if (times[counter] < times[secondFastestIdx] && counter != fastestIdx)
{
secondFastestIdx = counter;
}
}
return secondFastestIdx;
}
} // end class Lab
希望这会有所帮助
答案 3 :(得分:0)
您还应该考虑最快的情况。然后,您不能首先将event.preventDefault()
等于secondfastestIndex
。
(例如,在70、250、300、450的情况下)。注意寻找第二快的方法。就0
secondFastest
答案 4 :(得分:-1)
搜索没问题。只需将它们作为方法并从主程序中调用这些方法即可。指定用于调用方法的指令。
将第一个搜索循环放在方法“firstplace(int [] times)”中,并在此方法中执行第一个搜索。第二位也是如此。
我是编程新手,我觉得这会使代码遵循说明。