2015-10-28 2 views
2

Именно то, что говорится в названии. Я должен написать код, который запускает все три метода сортировки (пузырь, вставка, выбор). Пока у меня есть часть пузыря, но я не знаю, как заставить ее работать, потому что вы должны определить переменную, когда вы объявляете метод, чтобы получить возвращаемое значение. Но мне нужно, чтобы они возвращали переменные, определенные вне метода. Есть ли способ сделать это? Имейте в виду, что мне также нужны те же значения, которые использовались снова в двух других методах.Определение переменных вне методов и получение их возвращаемого значения

import java.util.Scanner; 

public class Sorting { 

static int d = 0; 
static int c = 0; 
static int n = 0; 
static int swap = 0; 
static int array[] = new int[n]; 

public static void main(String[] args) { 

    Scanner scan = new Scanner(System.in); 

    System.out.print("Number of elements: "); 
    n = scan.nextInt(); 



    System.out.print("Enter " + n + " elements: "); 

    for (c = 0; c < n; c++) 
     array[c] = scan.nextInt(); 
} 

    static void BubbleSort(int[] a) { //this line!! 

    for (c = 0; c < (n - 1); c++) { 
     for (d = 0; d < n - c - 1; d++) { 
     if (array[d] > array[d+1]) 
     { 
      swap  = array[d]; 
      array[d] = array[d+1]; 
      array[d+1] = swap; 
     } 
     } 
    } 

    System.out.print("Bubble sort: "); 

    for (c = 0; c < n; c++) 
     System.out.print(array[c] + " "); 
    } 
} 
+0

'«вы должны определить переменную, когда вы объявляя метод, так что вы можете получить возвращаемое значение»' - - ну, нет, ты не на самом деле. «Мне нужно, чтобы возвращали переменные, определенные вне метода». - Ваш метод сортировки пузырь ничего не возвращает прямо сейчас, вы определили его как возвращающий «void» (без возвращаемого значения) вместо возвращаемого типа. – azurefrog

+0

Еще одна проблема: вы определяете 'array' как массив размера' 0', поэтому ваша программа будет разбиваться на 'array [c] = scan.nextInt();'. Вам нужно создать свой массив * после того, как * вы получите размер от пользователя, или поместите свой ввод в «Список» и преобразуйте его в массив при вызове вашего сортировки. – azurefrog

+0

Благодарю вас за ваш вклад, я многое узнал из своих ошибок! я все еще немного неясен в первой части, но код janos, похоже, работает нормально, поэтому анализ этого может помочь мне дальше. – imaginedrragon

ответ

2

Трудно понять, что вы спрашиваете:

  • Метод BubbleSort принимает int[] a параметр, но не использует его
  • Метод main считывает числа в массив, но тогда никогда не называет BubbleSort
  • Вы 'спрашивает о возвращаемом значении BubbleSort, но метод объявлен void, и он изменяет содержимое array, переменную static: кажется, что этот метод не является i ntended ничего возвращать, но сортировать массив на месте
  • Многие неиспользуемые переменные
  • Многие переменные объявляются статическими в классе, когда они могут быть локальные переменные в методах, некоторые из них местные внутри for петли

с учетом указанных выше проблем, исправленных, ваша реализация будет сделать гораздо больше смысла, как это:

import java.util.Scanner; 

public class Sorting { 

    public static void main(String[] args) { 

     int n, c; 
     Scanner scan = new Scanner(System.in); 

     System.out.print("Number of elements: "); 
     n = scan.nextInt(); 
     int[] array = new int[n]; 

     System.out.print("Enter " + n + " elements: "); 

     for (c = 0; c < n; c++) { 
      array[c] = scan.nextInt(); 
     } 

     BubbleSort(array); 
    } 

    static void BubbleSort(int[] array) { 

     int n = array.length; 

     for (int c = 0; c < (n - 1); c++) { 
      for (int d = 0; d < n - c - 1; d++) { 
       if (array[d] > array[d + 1]) { 
        int swap = array[d]; 
        array[d] = array[d + 1]; 
        array[d + 1] = swap; 
       } 
      } 
     } 

     System.out.print("Bubble sort: "); 

     for (int c = 0; c < n; c++) { 
      System.out.print(array[c] + " "); 
     } 
    } 
} 
+0

спасибо, работает намного лучше, чем у меня, и плюс я попробовал добавить сортировку в том же порядке, и это сработало ! спасибо, я многому научился! – imaginedrragon

+0

Массив не копируется, поэтому этим методом вы можете выполнять только один вид за выполнение. –

-2

Метод void не может вернуть значение. Если вы хотите int[] a быть переданы BubbleSort(), сортируют, а затем вернулся, то заголовок должен выглядеть следующим образом:

static int[] BubbleSort(int[] a) { 

Способ также должен закончиться с обратным утверждением:

return a; 
+0

Если вы отсортируете массив в методе, вам не нужно его возвращать, он будет отсортирован. Это из-за того, что вы передаете ссылку на массив, а не значение @BethanyLouise – maskacovnik

+1

. Массив необходимо повторно использовать несколько раз, но поскольку массивы являются ссылками в java, он будет изменен после первого сортировки. –

2

На вверху вашего метода добавить:

int[] b = Arrays.copyOf(a, a.length); 

ПРИМЕЧАНИЕ: это необходимо для того, чтобы массив использовался еще два раза.

Теперь у вас есть новый массив, и вы можете работать на b, не затрагивая массив, который был передан для a. Вы можете изменить заголовок на static int[] BubbleSort(int[] a) и в конце return b;.

+1

Это очень полезный ответ, OP хочет сравнить возвращаемые значения, поэтому массив должен быть скопирован +1 – maskacovnik