我只是想按降序排序字符串。用户提供的输入是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中
答案 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
,则会true
,true
。
然而,给出了两个int
。我们怎么办?
那是对的,错误。
num[i] --> a String object (remember the declaration: String[] num = ...)
num[j] --> another String object
<
是&#39;小于&#39;比较运算符,适用于int
,long
,short
s,byte
s,float
和double
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}}