我试图按降序对数组进行排序,我知道有许多在线排序数组的例子,但我只想尝试按照自己的方式进行(只是尝试测试看看算法实际上可以工作)。但是有些原因,我无法输出存储结果的数组,我尝试过使用System.out.println(Arrays.toString(myList));并且一次打印它们,它适用于我创建的数组之一,但是当试图通过循环修改数组时,它拒绝输出任何内容,没有错误,没有任何东西就像什么都没有。非常感谢您的帮助。见下面的代码。感谢。
import java.util.Arrays;
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 9.2, 3.4, 4.2, 6.7, 3.5};
double[] sortedList = new double[7] ;
// Print all the array elements
for (double i: myList) {
System.out.println(i + " ");
}
// Summing all elements
double total = 0;
for (double x: myList) {
total += x;
}
System.out.println("Total is " + total);
// Finding the largest element
double max = myList[0];
int m, z = 0;
for (double k: myList) {
if (k > max) max = k;
}
do{
for (int i = m; i < myList.length; i++) {
if (myList[i] > max){
max = myList[i];
z = i;
}
}
sortedList[m] = max;
myList[z] =0;
m++;
} while(m < myList.length);
System.out.println("Max is " + max);
//System.out.println(Arrays.toString(myList));
for (double y: sortedList) {
System.out.println(y + " ");
}
}
}
答案 0 :(得分:1)
您只需使用内置函数按降序对数组进行排序
Arrays.sort(myList , Collections.reverseOrder());
System.out.println("myList Array Elements in reverse order:");
for (int i = 0; i < myList .length; i++)
System.out.println(intArray[i]);
它肯定会起作用。
答案 1 :(得分:0)
您的排序逻辑无法正常运行。我对它做了一些修改,试一试:
do {
max = 0;
for (int i = 0; i < myList.length; i++) {
if (myList[i] > max) {
max = myList[i];
z = i;
}
}
sortedList[m] = max;
myList[z] = 0;
m++;
} while (m < myList.length);
答案 2 :(得分:0)
首先,您需要将此行int m, z = 0;
转换为int m = 0, z = 0;
因为int m, z = 0;
相当于int m; int z = 0;
。因此,当您尝试使用变量m
时 - 它尚未初始化并导致编译错误。
修复上述语句后,程序将编译并运行,但程序逻辑中也存在错误,结果排序数组将输出为:
{9.2, 9.2, 9.2, 9.2, 9.2, 9.2, 9.2}
如以下栏目
for (double k: myList) {
if (k > max) max = k;
}
您最初找到的最大值为9.2。这就是为什么以后执行do .. while
并检查条件
if (myList[i] > max){
max = myList[i];
z = i;
}
语句myList[i] > max
将永远不会返回true
,因此您的max
将始终保持为9.2,z
将始终保持0
。这就是为什么行sortedList[m] = max;
总是将9.2插入到已排序数组的每个索引。
在这种情况下,我建议您使用您选择的IDE(Intellij Idea,Eclipse等),它将突出显示编译错误并帮助您使用集成调试器找到您的错误。
所以我发现你的错误,我想现在你可以管理它了。如有其他帮助,请随时与我们联系。
答案 3 :(得分:0)
以下代码适用于我。
public class Main {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 9.2, 3.4, 4.2, 6.7, 3.5};
double[] sortedList = new double[7] ;
// Print all the array elements
for (double i: myList) {
System.out.println(i + " ");
}
// Summing all elements
double total = 0;
for (double x: myList) {
total += x;
}
System.out.println("Total is " + total);
// Finding the largest element
double max = myList[0];
int m = 0;
int z = 0;
do{
for (int i = 0; i < myList.length; i++) {
if (myList[i] > max){
max = myList[i];
z = i;
}
}
sortedList[m] = max;
myList[z] =0;
m++;
max = 0;
} while(m < myList.length);
System.out.println("Max is " + max);
//System.out.println(Arrays.toString(myList));
for (double y: sortedList) {
System.out.println(y + " ");
}
}
}
您的代码包含三个错误:
1.您没有重置&#39; max&#39;在每次迭代中,导致排序列表&#39; 在每个条目中仅包含值9.2。
for (double k: myList) {
if (k > max) max = k;
}
是不必要的。而且,它甚至不跟踪最大元素的位置。
3
for (int i = m; i < myList.length; i++)
应改为
for (int i = 0; i < myList.length; i++)
您在排序列表中的位置&#39;与你在哪里无关 找到&#39; myList&#39;的最大元素。