我必须输入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;
}
}
}
}
}
当您交换数组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);
使用Map。这将双精度类型与字符串绑定,当基于双精度类型排序时,总能得到正确的日期。然后,您可以对Map的键集进行排序,但对于double,您最好使用TreeSet和Doubles自然排序。
Map的好处是它使你的代码更有逻辑,因为双精度和天数在概念上是一起的,所以它们应该存储在一个单一的数据结构中,这将使你的代码更容易理解。