0

我正在开发一个显示邮政编码和门牌号码的程序。我需要在第一列中按升序对邮政编码进行排序,然后从左到右对门牌号进行排序,使它们保持相同的邮政编码。例如:

看起来像这样:

90153 | 9810 6037 8761 1126 9792 4070

90361 | 2274 6800 2196 3158 9614 9086

我希望它看起来像这样:

90153 | 1126 4070 6037 8761 9792 9810

90361 | 2186 2274 3158 6800 9086 9614

我使用以下代码对邮政编码进行排序,但如何对门牌号进行排序?我是否需要添加一个循环来对这段代码的数字进行排序?如果有,在哪里?很抱歉,我无法正确缩进代码。

void DoubleArraySort()
{
    int k,m,Hide;

    boolean DidISwap;

    DidISwap = true;

    while (DidISwap)
    {
        DidISwap = false;
        for ( k = 0; k < Row - 1; k++)
        {
            if ( Numbers[k][0] > Numbers[k+1][0] )
            {
                for ( m = 0; m < Col; m++)
                {
                    Hide = Numbers[k ][m];
                    Numbers[k ][m] = Numbers[k+1][m];
                    Numbers[k+1][m] = Hide ;
                    DidISwap = true;
                }
            }
        }
    }
}
4

3 回答 3

2

使用这样的对象ZipCode

public class ZipCode{

    private String zipcode;
    private ArrayList<String> adds

    public ZipCode(String zip){
        zipcode = zip;
        adds = new ArrayList<String>();
    }

    public void addAddress(String address){
        adds.add(address);
        Collections.sort(adds);
    }

}

ZipCodes保持对它们进行排序的数组:

ZipCode[] zips = . . . 
  .
  .
  .
Arrays.sort(zips);
于 2012-11-11T01:19:08.000 回答
0

我/我们可以尝试告诉您如何修复(某种程度)您的代码以执行您想要的操作,但这会适得其反。相反,我将解释做这些事情的“Java 方式”,它(如果你遵循它)将使你更有效率,并使你的代码更易于维护。

  1. 遵循 Java 样式约定。特别是标识符约定。方法名称和变量名称应始终以小写字符开头。(并尝试使用暗示类/方法/变量含义的类、方法和变量名称。)

  2. 学习 Java API 并使用现有的标准库类和方法,而不是重新发明轮子。例如:

    • Arrays和类具有排序数组和集合的Collections标准方法。

    • 有实现集合和映射等的集合类型可以处理“无聊”的事情,比如保持元素有序。

  3. 如果您有一个复杂的数据结构,请从现有的集合类型和自定义类中构建它。不要尝试将其表示为数字数组。成功的 Java 程序员使用高级设计和实现抽象。你的方法就像试图用手工砖建造一个多层停车场。


我的建议是获得一本关于面向对象编程(Java 语言)的教科书,并了解设计和编写 Java 程序的正确方法。现在投入精力将使您更有效率。

于 2012-11-11T02:06:12.073 回答
0

首先,您是否知道 Java 提供了一种开箱即用的更高效的排序机制?检查数组类。

其次,你必须非常小心你的方法。您在这里所做的是将一行的所有元素与另一行交换。但是您在每一行中都没有做同样的事情。因此,您需要在当前 while(之前或之后,没有区别)之外有一个单独的嵌套循环,它会检查房屋本身并对其进行排序:

   for ( k = 0; k < Row; k++)
   {
     do
     {
       DidISwap = false;

       for ( m = 0; m < Col-1; m++)
       {
         if (Numbers[k][m] > Numbers[k][m+1])
         {
           Hide = Numbers[k][m];
           Numbers[k][m] = Numbers[k][m+1];
           Numbers[k][m+1] = Hide;
           DidISwap = true;
         }
       }
     }
     while (DidISwap);
   } 

但是,您的方法非常低效。为什么不将房屋列表放入SortedSet中,然后创建一个SortedMap将您的邮政编码映射到您的有序房屋集?一切都会自动排序,效率更高。

您可以将TreeMap用于您的SortedMap实现,并将TreeSet用于您的SortedSet实现。

于 2012-11-11T01:23:41.877 回答