任务是编写一个从数字列表中读取的基数排序程序,但我无法弄清楚通过获取最高数字的位数
到目前为止,我从一个文件(numbers.txt)中读取了数字,然后将它们打印到一个名为 numbers 的 ArrayList 中。然后我检查数字并找出最大的数字以及它的 10 的位置。
然后从他们那里我迷路了,不知道该怎么做
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class RadixSort {
final static int[] sizeArray = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, Integer.MAX_VALUE};
public static void main(String [] args){
ArrayList <Integer> numbers= new ArrayList <Integer>();
try {
Scanner sc=new Scanner(new File("numbers.txt"));
while(sc.hasNext()){
numbers.add(sc.nextInt());
}//end while
PrintArray(numbers);
System.out.println();
} //end try
catch (FileNotFoundException e) {
System.out.println("The file cannot be found");
}//end catch
int digits=FindDigits(numbers);
Radix(numbers, digits);
}//end main
public static void PrintArray(ArrayList<Integer> a){
for(int i=0; i<a.size(); i++){
System.out.print(a.get(i) + " ");
}//end for
}//end printArray
public static int FindDigits(ArrayList<Integer> numbers){
int biggest=numbers.get(0);
for(int i=0; i<numbers.size();i++){
if(numbers.get(i)>biggest){
biggest=numbers.get(i);
}//end if
}//end for
if(biggest==Integer.MAX_VALUE){
return 10;
}//end if
else{
for(int i=0;i<sizeArray.length; i++){
if(biggest/sizeArray[i]==0){
return i+1;
}//end if
}//end for
}//end else
return 1;
}//end find digits
public static void Radix(ArrayList<Integer> numbers, int digits){
ArrayList<Integer> sorted= new ArrayList<Integer>();
int divisor=1;
int digit;
for(int i=0; i<digits;i++){
divisor*=10;
}//end for
for(int i=0; i<numbers.size();i++){
digit=numbers.get(i)%divisor;
if(digit/10>0){
digit=(digit/(digits-1));
sorted.set(digit, numbers.get(i));
}//end if
else{
sorted.set(digit, numbers.get(i));
}//end else
}//end for
PrintArray(sorted);
}//end radix
}//end class