程序排序双数组运行与并行数组



我必须输入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的好处是它使你的代码更有逻辑,因为双精度和天数在概念上是一起的,所以它们应该存储在一个单一的数据结构中,这将使你的代码更容易理解。

最新更新