1

文字列を整数に解析しようとしていますが、互換性のない型になります。私のカウンターは、ファイル内のレコードの量です。プログラムはファイルに追加して読み取ることができます。今、私はそれをソートしてファイルに書き戻したいと思っています。このタスクを実行するにはどうすればよいですか? ここで宣言されていない変数は、グローバルに宣言されます。

public static void sort_addresses() throws IOException
{
 String tnumber;
 String tname;
 String tnrooms;
 int[] tmprooms;
 int[] tmprooms1;
 int j;
 for (int i = 0; i < counter; i++)
 {
    for(j = 1; j < (counter-1); j++)
    //while (street_name[counter] != null)
    {
        tmprooms = Integer.parseInt (number_rooms[counter]); 
        tmprooms1 = Integer.parseInt (number_rooms[counter+1]); 
        if (tmprooms[i] > tmprooms1[i+1])
        {
            tnumber = street_number[counter];
            tname =  street_name[counter];
            tnrooms = number_rooms[counter];
            street_number[counter] = street_number[counter +1];
            street_name[counter] = street_name[counter+1];
            number_rooms[counter] = number_rooms[counter+1];
            number_rooms[counter+1] = tnumber ;
            street_name[counter+1] = tname;
            number_rooms[counter+1] = tnrooms;
            System.out.println(street_number[i]+"\t"+street_name[i]
                +"\t"+number_rooms[i]);
        }
    }
4

4 に答える 4

0

これを試して

public static void sort_addresses() throws IOException
    {
     String tnumber;
     String tname;
     String tnrooms;
     int tmprooms;
     int tmprooms1;
     int j;
     for (int i = 0; i < counter; i++)
     {
        for(j = 1; j < (counter-1); j++)
        //while (street_name[counter] != null)
        {
            tmprooms = (Integer)number_rooms[counter]; 
            tmprooms1 = (Integer)number_rooms[counter+1]; 
            if (tmprooms[i] > tmprooms1[i+1])
            {
                tnumber = street_number[counter];
                tname =  street_name[counter];
                tnrooms = number_rooms[counter];
                street_number[counter] = street_number[counter +1];
                street_name[counter] = street_name[counter+1];
                number_rooms[counter] = number_rooms[counter+1];
                number_rooms[counter+1] = tnumber ;
                street_name[counter+1] = tname;
                number_rooms[counter+1] = tnrooms;
                System.out.println(street_number[i]+"\t"+street_name[i]
                    +"\t"+number_rooms[i]);
            }
        }
于 2013-06-13T12:44:08.893 に答える
0

Integer.parseInt()配列ではなくを返しますint(これは に自動ボックス化できます)。Integerint[]

変数tmproomsの型は ですがint[]、配列Integer.parseInt()を返しません。int[]

int[]以下を使用して、配列をソートできます。

Arrays.sort(int [])

以下を参照してください: Arrays#sort(int[])

于 2013-06-13T12:46:09.423 に答える
0

いくつかのこと:

  • tmproomsではなく、でtmprooms1ある必要があります。intint[]
  • jから開始する必要があります0
  • 配列アクセスjではなく、を使用する必要があります。counter
  • それSystem.out.printlnがどこにあるかは、実際には意味のあるものを出力しません。
  • number_rooms[counter+1] = tnumber;する必要がありますstreet_number[counter+1] = tnumber;
  • これはバブル ソートのように見えますが、早期に停止することはありません (したがって、すでに非効率なアルゴリズムよりもさらに効率的ではありません)。で使用されているものなど、はるかに優れたアルゴリズムが世の中にありますArrays.sort(以下を参照)。

最終的なコード:

public static void sort_addresses()
{
  String snumber, sname, tnrooms;
  int tmprooms, tmprooms1;
  for (int i = 0; i < counter; i++)
  {
     for (int j = 0; j < counter - 1; j++)
     {
        tmprooms = Integer.parseInt(number_rooms[j]);
        tmprooms1 = Integer.parseInt(number_rooms[j + 1]);
        if (tmprooms > tmprooms1)
        {
           snumber = street_number[j];
           sname = street_name[j];
           tnrooms = number_rooms[j];
           street_number[j] = street_number[j + 1];
           street_name[j] = street_name[j + 1];
           number_rooms[j] = number_rooms[j + 1];
           street_number[j + 1] = snumber;
           street_name[j + 1] = sname;
           number_rooms[j + 1] = tnrooms;
        }
     }
  }
}

テスト

オブジェクトを使用するより良い方法: (使用できるようにしますArrays.sort)

static class Address
{
  int numberOfRooms;
  String streetNumber;
  String streetName;

  Address(String streetName, String streetNumber, int numberOfRooms)
  {
     this.numberOfRooms = numberOfRooms;
     this.streetName = streetName;
     this.streetNumber = streetNumber;
  }

  @Override
  public String toString()
  {
     return numberOfRooms + ":" + streetName + ":" + streetNumber;
  }

  // an alternative is to have the class "implements Comparable<Address>"
  //   and have a "public int compareTo(Address o)" function
  //   then you can just say "Arrays.sort(addresses)"
  public static Comparator<Address> numberOfRoomsComparator
     = new Comparator<Address>() {
        @Override
        public int compare(Address o1, Address o2)
        {
          return Integer.valueOf(o1.numberOfRooms).compareTo(o2.numberOfRooms);
        }
     };
}

static Address[] addresses = {new Address("u1", "a1", 3),
                              new Address("u2", "a2", 1),
                              new Address("u3", "a3", 5),
                              new Address("u4", "a4", 4),
                              new Address("u5", "a5", 2)};

public static void main(String[] args)
{
  Arrays.sort(addresses, Address.numberOfRoomsComparator);
  System.out.println(Arrays.toString(addresses));
}
于 2013-06-13T15:41:02.047 に答える
0

宣言する:

  int[] tmprooms;
  int[] tmprooms1;

なので

  int tmprooms;
  int tmprooms1;

Integer#parseInt()intはではなく を返しますint[]

于 2013-06-13T12:43:29.050 に答える