为什么Java中的这种不起作用?

时间:2017-03-31 07:54:53

标签: java arrays function sorting main

我试图实施一种简短的排序算法,但它根本不起作用。有更多编程经验的人有任何提示吗?数组未排序,在最终打印中多次出现多个值。为什么呢?

public static void main(String[] args) {
    // Sort the data
    int[] array = {1,5,2,3,6,2,29,-2,23,3};

    for (int i = 0; i<array.length-1; i++) {

        if (array[i] > array[i+1]) {
            array[i+1] = array[i];
            array[i] = array[i+1];
        }
    }

    // Print the data.
    for (int i = 0; i<array.length; i++) {
        System.out.print(i+ ", ");
    }
}

5 个答案:

答案 0 :(得分:1)

你的交换被打破了。致电array[i+1] = array[i];后,array[i] = array[i+1];不执行任何操作,因为array[i+1]会被覆盖。您需要将值存储在临时变量中:

int temp = array[i+1];
array[i+1] = array[i];
array[i] = temp;

答案 1 :(得分:1)

下面:

array[i+1] = array[i];
array[i] = array[i+1];

您必须将值存储在临时变量中,就像在第二行中获得相同的值一样。

试试这个

int tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;

答案 2 :(得分:0)

几点。看看下面是否有帮助:

  1. 应该有一些编译问题 - 半冒号丢失,在数组上尝试长度()而不是长度。
    2。最后,您只需将i从0打印到数组长度。我想你要打印数组[i]。
    3.你可以通过谷歌搜索找到多种排序算法。如果选择冒泡排序,请尝试使用两个循环,一个是外部直到数组长度,另一个是内部,直到(数组长度元素已经排序)。在内部比较使用临时变量。

                temp = array[j];  
                array[j] = array[j+1];  
                array[j+1] = temp;   
    

答案 3 :(得分:0)

1如果要交换两个元素请使用临时变量

public void swap(int[] nums,int i,int j)
{ int tmp=nums][i]; 
  nums[i]=nums[j];
   nums[j]=tmp;
}

2这种显示方式无法对数据进行排序,这是我对数据进行排序的方法:

public void insertionSort(int nums[])
{
   int j;
   for(int i=1,i<nums.length-1;i++){
     int tmp=nums[i];
     for(j=i;j>0&&nums[j]<nums[j-1];j--)
         nums[j]=nums[j-1];
     nums[j]=tmp;
   }
 }

答案 4 :(得分:0)

你需要添加temporel变量并在每次交换后返回数组的开头

desktopMediaRequestId = chrome.desktopCapture.chooseDesktopMedia(data_sources, tab, function(streamId) {
if (streamId) {
  msg.type = 'SUCESS';
  msg.streamId = streamId;
} else {
  msg.type = 'FAILURE';
}
port.postMessage(msg);});