我必须键入7个值,表示距离。必须按升序对交换排序进行排序。
我还设置了一个并行数组来跟踪一周中的日期,这样当您输出已排序的数据时,会列出相应的工作日。
我可以毫无问题地对数组进行排序,但是当我输入日期时,它将按照我输入的顺序打印出来,而不是相应的值。我无法弄清楚如何输入具有相应值的日期。我知道我的逻辑是关闭的。提前谢谢!
样品输出:
周四7公里
周一8公里
周二4公里
等等...
import java.io.*;
import java.util.*;
public class exchangeSort
{
public static void main()
{
Scanner kbReader= new Scanner (System.in);
double dist []= new double [7];
String days []= new String [7];
for (int i=0; i<dist.length; i++)
{
System.out.println("Enter distance");
dist[i]= kbReader.nextDouble();
System.out.println("Now enter a day");
days[i]= kbReader.next();
}
System.out.println(" ");
sort (dist);
for (int i=0; i<days.length; i++)
{
System.out.println(dist[i] + " km on " + days[i]);
}
}
public static void sort (double num [] )
{
int i, j;
double temp;
for ( i=0; i< num.length-1; i++ )
{
for ( j=i+1; j <num.length; j++ )
{
if( num[i] > num[j] )
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
}
}
答案 0 :(得分:2)
交换数组numbers
的元素时,还要交换数组labels
的元素:
public static void sort (double num [], String[] labels )
{
int i, j;
double temp;
for ( i=0; i< num.length-1; i++ )
{
for ( j=i+1; j <num.length; j++ )
{
if( num[i] > num[j] )
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
// ----------------- here -------------------
String tmp = labels[i];
labels[i] = labels[j];
labels[j] = tmp;
}
}
}
}
然后您可以简单地将日期传递给排序功能:
sort (dist, days);
答案 1 :(得分:0)
使用地图。这将双重绑定到字符串,当您根据双重排序时,您总能获得正确的一天。然后,您可以根据需要对Map的键集进行排序,但对于double,您最好使用TreeSet和Doubles自然排序。
关于Map的一个好处是它使你的代码更符合逻辑,因为双重和日期在概念上真的在一起,所以它们应该存储在一个数据结构中,这将使你的代码更容易理解