Java 为什么我的语句不能将字符串解析为整数?

Java 为什么我的语句不能将字符串解析为整数?,java,arrays,sorting,Java,Arrays,Sorting,我试图将字符串解析为整数,但得到了不兼容的类型。我的计数器用于计算文件中记录的数量,程序可以附加到文件中并从中读取。现在我想对它进行排序并将其写回文件。如何执行此任务?此处未声明的变量是全局缩放的 public static void sort_addresses() throws IOException { String tnumber; String tname; String tnrooms; int[] tmprooms; int[] tmprooms1; int j; f

我试图将字符串解析为整数,但得到了不兼容的类型。我的计数器用于计算文件中记录的数量,程序可以附加到文件中并从中读取。现在我想对它进行排序并将其写回文件。如何执行此任务?此处未声明的变量是全局缩放的

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]);
        }
    }
public static void sort_addresses()引发IOException
{
字符串编号;
字符串名称;
弦乐室;
int[]tmprooms;
int[]tmprooms1;
int j;
对于(int i=0;itmprooms1[i+1])
{
t编号=街道号[柜台];
tname=街道名称[柜台];
tnrooms=房间数量[柜台];
街道号码[柜台]=街道号码[柜台+1];
街道名称[柜台]=街道名称[柜台+1];
房间数量[柜台]=房间数量[柜台+1];
房间数量[柜台+1]=t数量;
街道名称[柜台+1]=名称;
房间数量[柜台+1]=房间数量;
System.out.println(街道编号[i]+“\t”+街道名称[i]
+“\t”+房间数量[i];
}
}
声明:

  int[] tmprooms;
  int[] tmprooms1;
作为

返回一个
int
,而不是
int[]

请尝试此操作

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]);
            }
        }
public static void sort_addresses()引发IOException
{
字符串编号;
字符串名称;
弦乐室;
int tmprooms;
int tmprooms1;
int j;
对于(int i=0;itmprooms1[i+1])
{
t编号=街道号[柜台];
tname=街道名称[柜台];
tnrooms=房间数量[柜台];
街道号码[柜台]=街道号码[柜台+1];
街道名称[柜台]=街道名称[柜台+1];
房间数量[柜台]=房间数量[柜台+1];
房间数量[柜台+1]=t数量;
街道名称[柜台+1]=名称;
房间数量[柜台+1]=房间数量;
System.out.println(街道编号[i]+“\t”+街道名称[i]
+“\t”+房间数量[i];
}
}
Integer.parseInt()
返回一个
int
(可以自动装箱为
整数),而不是
int[]
数组

变量
tmprooms
的类型为
int[]
,但
Integer.parseInt()
不返回
int[]
数组

以下内容可用于对
int[]
数组进行排序:

Arrays.sort(int [])
请看以下内容:

几件事:

  • tmprooms
    tmprooms1
    需要是
    int
    ,而不是
    int[]
  • j
    需要从
    0
    开始
  • 对于数组访问,您需要使用
    j
    ,而不是
    计数器
  • 它所在的
    System.out.println
    实际上没有打印任何有意义的内容
  • number\u房间[counter+1]=tnumber;
    应该是
    街道号[counter+1]=tnumber;
  • 这似乎是,只是没有提前停止(因此效率甚至低于已经低效的算法)。有更好的算法,如
    array.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;
        }
     }
  }
}

修复了你的格式设置。谢谢大家,我忘了提到3个字符串数组,我想对number_rooms进行排序,然后写回文件。number_rooms声明为GloballyIt返回一个
int
整数。valueOf
返回一个
整数。number_rooms中有数字,我想对其进行排序,请问我该怎么做?文件中有3个数组谢谢,我在同一个文件中有3个数组。我认为排序只会对一个数组进行排序。您可能需要合并或合并三个int数组,在这个例子中,您可能需要查看以下参考:blackpanther,3个数组作为字符串存储在一个.txt文件中,我认为最好的排序方式是对num进行排序ber_rooms,这就是为什么我试图对它进行排序,但我也希望其余的数组保持同步响应是不可逆类型--tmprooms=(整数)number_rooms[计数器];嗨,Shreyans jogi,我现在在tmprooms1行得到数字格式的exoption。嗨,Dukeling,为什么在语句:Address中的字符串后面会有一个arror(String streetNumber,String streetName,int numberOfRooms)?它说它是wExpecting a)?再次感谢。我已经尝试了这两个部分,第一个部分在tmprooms1=Integer.parseInt(number_rooms[j+1]处没有给出数字格式异常);我原以为输入字符串可以克服这一点,但事实并非如此。再次感谢您到目前为止的输入。我非常新,因此代码的低效性是为什么Dukeling需要第二段代码的原因-它不应该这样说。该代码应该按原样运行。请随意放置代码,我可以看一看。
NumberFormatException
意味着e字符串不包含可解析的整数。该字符串应仅包含整数,而不包含其他内容。请尝试打印该字符串并查看其外观。似乎无法在此处粘贴代码。但错误出现在地址的第一个字符串:-地址(字符串streetName、字符串streetNumber、int numberOfRooms)我把它放在你的某处了
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;
        }
     }
  }
}
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));
}