我有这个代码;
它们都使用system.out.println
语句打印出数组元素。最初,我使用带有Arrays.toString(array)
的return语句在主方法中显示正常工作的数组。现在,我想使用打印语句只是为了降低复杂性。如您所见,输出形式排序缺少数组中的最后一个元素,这是因为我正在使用array.length -1
。但是,如果我不使用array.length -1
,我会得到一个.ArrayIndexOutOfBoundsException
,那么有人对此有实际的解决方案吗?
import java.util.Arrays;
public class SortMethod
{
static int[] array = {2,1,5,3,5};
public void sort(int[] arrays)
{
for(int i = 0;i < arrays.length - 1;i++ )
{
int store = 0;
if (arrays[i + 1 ] < arrays[i])
{
store = arrays[i];
arrays[i] = arrays[i + 1];
arrays[i + 1] = store;
}
System.out.print(arrays[i]);
}
System.out.println();
}
public void reverse (int[] arrays)
{
for (int i=arrays.length-1; i >=0; i--)
{
System.out.print(arrays[i]);
}
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
SortMethod sort = new SortMethod();
sort.sort(array);
sort.reverse(array);
}
}
输出;
From Sort:1235
From Reverse:55321
最佳答案
首先,您的排序方法实际上没有正确排序。您可以使用左端的值来检查值,但是如果列表末尾有一个4,会发生什么呢?
{2,1,5,3,5,4}
将返回结果:
123545
这很难排序...您将要获取切换的每个值,并向后检查它,并确保它也不小于先前的值。现在,您将值排序到右侧,但再也不会回到左侧。
您也可以只执行排序算法,然后在数组中进行迭代并随后打印值,而不是尝试在排序方法的中间打印它们:
public class TestCode
{
static int[] array = {2,1,5,3,5,4,9,1,99,7};
public void sort(int[] arrays)
{
for(int i = 0; i < arrays.length - 1 ;i++ )
{
int store = 0;
// Move larger values to the right
if (arrays[i] > arrays[i + 1])
{
store = arrays[i];
arrays[i] = arrays[i + 1];
arrays[i + 1] = store;
// Sort swapped smaller values to the left
for(int j = i; j > 1; j--)
{
if (arrays[j] < arrays[j - 1])
{
store = arrays[j];
arrays[j] = arrays[j - 1];
arrays[j - 1] = store;
}
}
}
}
for(int i = 0; i < array.length; i ++)
{
System.out.print(arrays[i] + " ");
}
System.out.println();
}
public void reverse (int[] arrays)
{
for (int i=arrays.length-1; i >=0; i--)
{
System.out.print(arrays[i] + " ");
}
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestCode sort = new TestCode();
sort.sort(array);
sort.reverse(array);
}
}
给出输出:
1 1 2 3 4 5 5 7 9 99
99 9 7 5 5 4 3 2 1 1
摘要:
在对数组进行排序时,您需要遍历数组
array.length - 1
次以比较值(您无需将最后一个值与其右边的值进行比较,因为其中没有一个)。打印数组时,您需要遍历
array.length
次并打印出每个值。您的主要问题来自尝试在排序算法中打印出数组,而这种情况仅在您可能只是在排序算法之外打印数组时才遍历数组array.length - 1
次。