程序用于对使用并行数组运行的双数组进行排序

时间:2014-05-12 15:18:16

标签: java arrays sorting

我必须键入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; 
            } 
        }
    }
} 
}

2 个答案:

答案 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的一个好处是它使你的代码更符合逻辑,因为双重和日期在概念上真的在一起,所以它们应该存储在一个数据结构中,这将使你的代码更容易理解