if语句中出错

时间:2015-03-08 12:20:20

标签: java

我只是想按降序排序字符串。用户提供的输入是10,a,1,#,15,。,6输出必须是10,a,15,#,6,。,1我试过。

String input = JOptionPane.showInputDialog("Enter a string:");
String[] num = input.split(",");
ArrayList<String> arr = new ArrayList<>();

 System.out.println(num);
  for ( int i = 0; i < num.length - 1; i ++ )  
   {
    for (int j = i + 1; j < num.length; j ++ )
     {
       if(Integer.parseInt(num[i]) 
       && Integer.parseInt(num[j])  
        && num[i] < num[j])  {
          String temp = num[ i ];   //swapping
           num[ i ] = num[ j ];
           num[ j ] = temp;
            }
            }           
      } 
     }

在if语句中我得到错误。错误: - 操作员&amp;&amp;未定义参数类型int,int      - 运营商&lt;未定义参数类型java.lang.String,      java.lang.String中

4 个答案:

答案 0 :(得分:2)

您可以替换

   if(Integer.parseInt(num[i]) 
      && Integer.parseInt(num[j])  
      && num[i] < num[j])  {

   if(Integer.parseInt(num[i])  <
      Integer.parseInt(num[j])) {  

但是,如果其中一个字符串无法解析为整数,那么您将获得NumberFormatException。

答案 1 :(得分:1)

你应该改变你的if:

Integer.parseInt(num[i]) 
   && Integer.parseInt(num[j])  
    && num[i] < num[j]

要:

Integer.parseInt(num[i]) 
   < Integer.parseInt(num[j])  
   ^^^
    && num[i].compareTo(num[j]) < 0
              ^^^^^^^^^

如果要比较两个数字,可以比较小于/大于和/或等于。你可以申请&amp;&amp;在condition1 && condition2

这两个布尔值上

除此之外,如果任何数字不能解析为整数,那么您可能会得到NumberFormatException。所以我建议你首先识别输入,然后使用api将其转换为数字。

答案 2 :(得分:0)

第一件事就是让你的代码编译:回想一下Integer.parse返回整数,所以你不能在逻辑表达式的序列中使用它。

然后,您应该提高代码的效率:在循环外部移动num[i]解析,并在解析失败时跳过循环,如下所示:

for ( int i = 0; i < num.length - 1; i ++ ) {
    int numI;
    try { numI = Integer.parse(num[i]); } catch (NumberFormatException nfe) { continue; }
    for (int j = i + 1; j < num.length; j ++ ) 
        int numJ;
        try { numJ = Integer.parse(num[i]); } catch (NumberFormatException nfe) { continue; }
        if (numI < numJ) {
            String temp = num[ i ];   //swapping
            num[ i ] = num[ j ];
            num[ j ] = temp;
        }
    }
}

现在,当解析num[i]失败时,程序会跳过嵌套循环,转而转到下一个字符串。

答案 3 :(得分:0)

我不会查看其余的代码,但错误的位应该会出错。这是一个例子:

Integer.parseInt(num[i]) --> an int
Integer.parseInt(num[j]) --> another int

&&需要两个boolean,如果两者都评估为boolean,则会truetrue

然而,给出了两个int。我们怎么办? 那是对的,错误。

num[i] --> a String object (remember the declaration: String[] num = ...)
num[j] --> another String object

<是&#39;小于&#39;比较运算符,适用于intlongshort s,byte s,floatdouble s。

由于String不是这些数字类型之一,因此会抛出错误。

我想你想说Integer.parseInt(num[i]) < Integer.parseInt(num[j])。这是有效的,因为您为<运算符提供了两个int s。有些int比其他String更大,而不是NumberFormatException s,所以它编译得很好。但要注意伊兰答案中的警告;如果Integer.parseInt()被输入无效,您将获得try。要解决此问题,请使用catch / int numI, numJ; try { numI = Integer.parseInt(num[i]); numJ = Integer.parseInt(num[j]); // rest of code } catch (NumberFormatException e) { // not a number, handle here! }

{{1}}