Самый простой способ найти длину числа - это преобразовать его в String
и затем вызвать метод length
для него.
int number = 123;
String numberAsString = String.valueOf(number);
int length = numberAsString.length(); // returns 3
Но вы также можете сделать это путем деления , Следующий метод берет число и делит на кратные 10
.
- делим на 1 (у нас есть хотя бы длина 1)
- делим на 10> 0 (мы иметь как минимум длину 2)
- деление на 100> 0 (у нас как минимум длина 3)
- ...
переменная i
используется в качестве дивиденда, а переменная j
используется в качестве счетчика. j
считает длину числа.
Как только number / i
равно нулю, мы возвращаем значение счетчика.
public int lengthOfNumber(int number) {
if (number == 0) {
return 1;
}
for (int i = 1, j = 0; ; i *= 10, j++) {
if (number / i == 0) {
return j;
}
}
}
Существует несколько способов сортировки массива. Вот несколько примеров (я использовал строковую версию для сравнения значений).
Использовать вложенные для -l oop
public void sortArray(int[] array) {
for (int i = 0; i < array.length; i++) {
int swapIndex = -1;
int maxLength = String.valueOf(array[i]).length();
for(int j = i + 1; j < array.length; j++) {
int length2 = String.valueOf(array[j]).length();
if (maxLength < length2) {
maxLength = length2;
swapIndex = j;
}
}
if (swapIndex > -1) {
int temp = array[i];
array[i] = array[swapIndex];
array[swapIndex] = temp;
}
}
}
Я использовал переменную swapIndex
, которая инициализируется с помощью -1
. Таким образом, мы можем избежать ненужных операций с массивами. Мы берем первый элемент во внешнем for-l oop и go через остальную часть массива во внутреннем for-l oop. мы сохраняем новый swapIndex
, только если в остальной части массива есть число с большей длиной. если нет номера с большей длиной, swapIndex
остается -1
. Мы делаем возможный обмен только во внешнем for-l oop, если необходимо (если установлен swapIndex
).
Использование Arrays.sort ()
Если вы хотите использовать Arrays.sort
вам нужно преобразовать ваш массив из примитивного типа int
в Integer
.
public void sortArray(Integer[] array) {
Arrays.sort(array, (o1, o2) -> {
Integer length1 = String.valueOf(o1).length();
Integer length2 = String.valueOf(o2).length();
return length2.compareTo(length1);
});
}
Использование рекурсивного метода
public void sortArray(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
String current = String.valueOf(array[i]);
String next = String.valueOf(array[i + 1]);
if (current.length() < next.length()) {
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
// here you do a recursive call
sortArray(array);
}
}
}