如何仅选择整数并按降序对它们进行排序并放置其位置以保持其他字符的位置不变?
我试过了
for ( i = 0; i < num.length - 1; i ++ )
{
for ( j = i + 1; j < num.length; j ++ )
{
if( i < j ) //sorting into descending order
{
temp = num[ i ]; //swapping
num[ i ] = num[ j ];
num[ j ] = temp;
}
}System.out.print(temp+",");
我希望输入为f,2,3,a,9,5并输出为f,9,5,a,3,2
答案 0 :(得分:0)
一种简单的方法(不是最快的方法)是只拉出数字,对它们进行排序,然后将它们放回到数组中。
这允许您使用Java内置的排序方法,这使读者明白您正在做什么:
public static void main(String[] args) {
char[] arr = { 'f', '2', '3', 'a', '9', '5' };
List<Character> onlyNumbers = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (Character.isDigit(arr[i])) {
// if this position contains a digit, add it to our list
onlyNumbers.add(arr[i]);
}
}
// sort using the reverse of the natural ordering
Collections.sort(onlyNumbers, Collections.reverseOrder());
for (int i=0; i< arr.length; i++) {
if (Character.isDigit(arr[i])) {
// if this position contains a digit,
// replace it with the highest remaining digit
arr[i] = onlyNumbers.remove(0);
}
}
System.out.println(Arrays.toString(arr)); // [f, 9, 5, a, 3, 2]
}
此解决方案优先考虑速度的可读性。实现一个对数字进行排序的方法会更快,但除非您正在处理大量数据,否则这应该足够快。
答案 1 :(得分:0)
您可以使用现有的大多数方法
通过检查数字来删除if(i < j)
检查,如果它们是错误顺序的数字,则将它们交换:
char num [] = { 'f','2','3','a','9','5'};
System.out.println(num);
for ( int i = 0; i < num.length - 1; i ++ )
{
for (int j = i + 1; j < num.length; j ++ )
{
if( Character.isDigit(num[i])
&& Character.isDigit(num[j])
&& num[i] < num[j]) {
char temp = num[ i ]; //swapping
num[ i ] = num[ j ];
num[ j ] = temp;
}
}
}
System.out.println(num);//Prints f95a32
编辑
如果您需要使用比数字更大的数字,
您可以使用String对象数组而不是字符数组。而不是Character.isDigit,您可以使用Integer.parseInt。如果字符串不是整数,Integer.parseInt将抛出NumberFormatException,因此您必须将该异常作为无交换案例处理。