#java
#java
Вопрос:
Я пытаюсь выполнить сортировку массива двойников, но я получаю сообщение об ошибке. Мне нужна ваша помощь, ребята.
import java.util.Arrays;
class MergeSort {
public static void main(String args[]) {
MergeSort ob = new MergeSort();
double nums[] = { 1.1, 1.2, 1.3, 2.2, 1.4, 2.3, 1.5, 9.8, 7.3, 7.7, 5.2, 5.1, 9.9, 4.1, 4.3, 4.2 };
System.out.println("Original Array:");
System.out.println(Arrays.toString(nums));
ob.sort(nums, 0, nums.length - 1);
System.out.println("Sorted Array:");
System.out.println(Arrays.toString(nums));
}
void merge(double nums[], int left, int m, int right) {
int n1 = m - left 1;
int n2 = right - m;
int Left_part_arra[] = new int[n1];
int Right_part_arra[] = new int[n2];
for (int i = 0; i < n1; i)
Left_part_arra[i] = nums[left i];
for (int j = 0; j < n2; j)
Right_part_arra[j] = nums[m 1 j];
int i = 0, j = 0;
int k = left;
while (i < n1 amp;amp; j < n2) {
if (Left_part_arra[i] <= Right_part_arra[j]) {
nums[k] = Left_part_arra[i];
i ;
} else {
nums[k] = Right_part_arra[j];
j ;
}
k ;
}
while (i < n1) {
nums[k] = Left_part_arra[i];
i ;
k ;
}
while (j < n2) {
nums[k] = Right_part_arra[j];
j ;
k ;
}
}
void sort(double nums[], int left, int right) {
if (left < right) {
int m = (left right) / 2;
sort(nums, left, m);
sort(nums, m 1, right);
merge(nums, left, m, right);
}
}}
Я использую eclipse для написания кода, и я получаю красное подчеркивание в этой части, которую я только что добавил ** ** для выделения. Я попытался применить к нему кастинг, но десятичные дроби равнялись 0.
for (int i = 0; i < n1; i)
Left_part_arra[i] = **nums[left i];**
for (int j = 0; j < n2; j)
Right_part_arra[j] = **nums[m 1 j];**
Заранее благодарю вас!
Комментарии:
1. Почему вы пытаетесь сохранить double (ы) в массивах int?
double[] Left_part_arra[] = new double[n1];
иdouble[] Right_part_arra = new double[n2];
2. VTCing как опечатка.
Ответ №1:
Измените свой код на:
double Left_part_arra[] = new double[n1];
double Right_part_arra[] = new double[n2];
for (int i = 0; i < n1; i)
Left_part_arra[i] = nums[left i];
for (int j = 0; j < n2; j)
Right_part_arra[j] = nums[m 1 j];
Это дает результат:
Original Array:
[1.1, 1.2, 1.3, 2.2, 1.4, 2.3, 1.5, 9.8, 7.3, 7.7, 5.2, 5.1, 9.9, 4.1, 4.3, 4.2]
Sorted Array:
[1.1, 1.2, 1.3, 1.4, 1.5, 2.2, 2.3, 4.1, 4.2, 4.3, 5.1, 5.2, 7.3, 7.7, 9.8, 9.9]
Примечание: старайтесь соблюдать соглашения об именовании переменных Java, первая буква переменных должна быть в нижнем регистре. Первая буква класса / интерфейса указана в верхнем регистре, а константы полностью записываются в верхнем регистре.
https://www.oracle.com/technetwork/java/codeconventions-135099.html