【问题标题】:Method doesn't take proper array方法没有采用正确的数组
【发布时间】:2013-12-08 21:37:17
【问题描述】:

我的代码会正确地对数字进行排序,但是当它输出数组时,排序后的数组会重复两次。我希望它输出原始数组,然后输出排序数组。必须以这种方式将其拆分为不同的方法。这是我当前的代码:

import javax.swing.*;
import java.io.*;
import java.util.*;

public class Gates_sortingBubble{

public static void main(String[] args)throws IOException{

  JOptionPane.showMessageDialog (null, "Please enter five numbers.", "Sorting Arrays", JOptionPane.INFORMATION_MESSAGE);

  String number1s;
  number1s = JOptionPane.showInputDialog("Number 1: ");
  int number1 = Integer.parseInt(number1s);

  String number2s;
  number2s = JOptionPane.showInputDialog("Number 2: ");
  int number2 = Integer.parseInt(number2s);

  String number3s;
  number3s = JOptionPane.showInputDialog("Number 3: ");
  int number3 = Integer.parseInt(number3s);

  String number4s;
  number4s = JOptionPane.showInputDialog("Number 4: ");
  int number4 = Integer.parseInt(number4s);

  String number5s;
  number5s = JOptionPane.showInputDialog("Number 5: ");
  int number5 = Integer.parseInt(number5s);

  int[] numbers = {number1, number2, number3, number4, number5};

  sort(numbers);

}

public static void sort(int[] tosort){

  int[] original = tosort;

  int j;
  boolean flag = true;     //set flag to true to begin first pass
  int temp;       //to hold the variable

  while(flag){       
     flag= false;  
     for( j=0;  j < tosort.length -1;  j++ ){
        if ( tosort[ j ] < tosort[j+1] ){  
           temp = tosort[ j ];              
           tosort[ j ] = tosort[ j+1 ];
           tosort[ j+1 ] = temp;
           flag = true;  
        }
     }
  } 

这是您将两个变量发送到方法中的方式吗?或者这就是错误所在?

  print(tosort, original);
}   


public static void print(int[] sorted, int[] unsorted){

  JOptionPane.showMessageDialog (null, "Your original five numbers are: " + Arrays.toString(unsorted) + ". \nYour new five numbers are: " + Arrays.toString(sorted) + ".", "Sorted Arrays", JOptionPane.INFORMATION_MESSAGE);

   //Arrays.toString(sorted)

} 
}

【问题讨论】:

    标签: java arrays sorting bubble-sort


    【解决方案1】:

    你可以使用:

    int[] original  = tosort.clone();
    

    这会将所有元素复制到原始数组。

    【讨论】:

      【解决方案2】:

      也许你不应该输入这个:

       public static void sort(int[] tosort){
      
           int[] original = tosort; 
      

      它将复制两个数组的地址。不是他们的价值观。您可以使用 for 循环将每个值从一个复制到另一个。

      【讨论】:

        【解决方案3】:

        好的,所以您将原始数字存储在:

        int[] numbers = {number1, number2, number3, number4, number5};
        

        没关系。现在更改 sort() 签名以返回带有排序数组的 int[],并将其稍微修改为:

        //returns an array of sorted numbers
        public static int[] sort(int[] tosort){
            //create a temporary array that will be returned with sorted numbers
            int[] tempArray = Arrays.copyOf(tosort, tosort.length);
        
            int j;
            boolean flag = true;     //set flag to true to begin first pass
            int temp;       //to hold the variable
        
            while(flag){
                flag= false;
                for( j=0;  j < tempArray.length -1;  j++ ){
                    if ( tempArray[ j ] < tempArray[j+1] ){
                        temp = tempArray[ j ];
                        tempArray[ j ] = tempArray[ j+1 ];
                        tempArray[ j+1 ] = temp;
                        flag = true;
                    }
                }
            }
        
            //return our sorted array
            return tempArray;
        }
        

        然后,在您的 main() 中,您可以执行以下操作:

        //get sorted array
        int[] sorted = sort(numbers);
        
        //print sorted and original array
        print(sorted, numbers);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多