Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java循环按每个元素中的位数从大到小对数组进行排序_Java_Arrays_Loops_Sorting - Fatal编程技术网

使用java循环按每个元素中的位数从大到小对数组进行排序

使用java循环按每个元素中的位数从大到小对数组进行排序,java,arrays,loops,sorting,Java,Arrays,Loops,Sorting,我试图根据每个元素中的位数从大到小对数组进行排序。这在技术上是可行的,但它似乎也按值对数组进行排序。例如,与其打印出1234 700 234 80 52,不如打印出1234 234 700 52 80,因为在原始数组中234在700之前 public class Sort { public static void main(String[] args) { //Initialize array int [] arr = n

我试图根据每个元素中的位数从大到小对数组进行排序。这在技术上是可行的,但它似乎也按值对数组进行排序。例如,与其打印出1234 700 234 80 52,不如打印出1234 234 700 52 80,因为在原始数组中234在700之前

public class Sort {    
    public static void main(String[] args) {        
        //Initialize array     
        int [] arr = new int [] {52, 234, 80, 700, 1234};     
        int temp = 0;    

        //Displaying elements of original array    
        System.out.println("Elements of original array: ");    
        for (int i = 0; i < arr.length; i++) {     
            System.out.print(arr[i] + " ");    
        }    

        //Sort the array in descending order
        //Math function is used to find length of each element    
        for (int i = 0; i < arr.length; i++) {    
            for (int j = i+1; j < arr.length; j++) {     
               if(Math.log10(arr[i]) + 1 < Math.log10(arr[j]) + 1) {    
                   temp = arr[i];    
                   arr[i] = arr[j];    
                   arr[j] = temp;    
               }     
            }     
        }    

        System.out.println();    

        //Displaying elements of array after sorting    
        System.out.println("Elements of array sorted in descending order: ");    
        for (int i = 0; i < arr.length; i++) {     
            System.out.print(arr[i] + " ");    
        }    
    }    
}
公共类排序{
公共静态void main(字符串[]args){
//初始化数组
int[]arr=newint[]{52234,807001234};
内部温度=0;
//显示原始数组的元素
System.out.println(“原始数组的元素:”);
对于(int i=0;i
查找数字长度的最简单方法是将其转换为
字符串
,然后对其调用方法
length

int number=123;
String numbersString=String.valueOf(number);
int length=numberString.length();//返回3
但你也可以通过除法。以下方法取一个数字并除以10的倍数

  • 除以1(我们的长度至少为1)
  • 除以10>0(我们的长度至少为2)
  • 除以100>0(我们的长度至少为3)
变量
i
用作红利,变量
j
用作计数器
j
计算数字的长度

只要
number/i
等于零,我们就返回计数器值

public int lengthOfNumber(整数){
如果(数字==0){
返回1;
}
对于(inti=1,j=0;i*=10,j++){
如果(数字/i==0){
返回j;
}
}
}
有多种方法可以对数组进行排序。下面是一些示例(我使用字符串版本来比较这些值)

使用嵌套for循环
publicsvoidsortarray(int[]数组){
for(int i=0;i-1){
int temp=数组[i];
数组[i]=数组[swapIndex];
数组[swapIndex]=温度;
}
}
}
我使用了一个变量
swapIndex
,它用
-1
初始化。这样可以避免不必要的数组操作。 我们取外部for循环中的第一个元素,然后遍历内部for循环中数组的其余部分。如果数组的其余部分中有一个长度更大的数字,我们只保存一个新的
swapIndex
。如果没有长度更大的数字,
swapIndex
将保留
-1
。如果需要(如果设置了
swapIndex
),我们只在外部for循环中进行可能的交换

使用Arrays.sort() 如果要使用
数组。排序
,则需要将数组从基元类型
int
转换为
整数

public void sortArray(整数[]数组){
排序(数组,(o1,o2)->{
整数长度1=String.valueOf(o1.length();
整数长度2=String.valueOf(o2).length();
返回长度2。与(长度1)相比;
});
}
使用递归方法
publicsvoidsortarray(int[]数组){
for(int i=0;i
Math.log10()
取决于该值。只需为数组中的每个值打印出
Math.log10(arr[i])
。然后你就会明白为什么它是这样排序的。我如何改变代码来反映一个整数而不是小数?我尝试使用Math.ceil()方法进行取整,该方法非常适合此数组,但较长的数组(例如,{394、8060、13、244、11723、10203、31465、1145、3135})不起作用,我添加了一个答案。希望对您有所帮助。我尝试了嵌套for循环的代码,但当我输入394、8060、13、244、11723、10、203、31465、1145、3135时,我得到了3135 31465 394 1145 11723 244 8060 203 10 13作为输出,尽管这不正确