2013-12-08 5 views
0

Мой код правильно сортирует числа, но когда он выводит массивы, его сортировка повторяется дважды. Я хочу, чтобы он выводил исходный массив, а затем отсортированный массив. Таким образом, он должен быть разделен на разные методы. Вот мой текущий код:Метод не принимает правильный массив

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) 

} 
} 

ответ

1

Вы могли бы использовать:

int[] original = tosort.clone(); 

Это будет копировать все элементы в массиве первоначально.

1

может быть, вы не должны вводить это:

public static void sort(int[] tosort){ 

    int[] original = tosort; 

он будет копировать адреса двух массивов. а не значения в них. вы можете использовать цикл for для копирования каждого значения из одного в другое.

0

Итак, вы храните свои оригинальные номера в:

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

Это нормально. Теперь измените сортировки() подпись вернуть ИНТ [] с отсортированного массива, и изменить его немного:

//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; 
} 

Затем, в основном(), вы можете сделать следующее:

//get sorted array 
int[] sorted = sort(numbers); 

//print sorted and original array 
print(sorted, numbers); 
Смежные вопросы