2013-12-05 3 views
-1

Я читаю числа из массива, а затем использую свой класс BubbleSort для сортировки чисел в массиве. Я изо всех сил пытаюсь получить свой призыв к классу BubbleSort для работы.Вызов метода из другого класса без объектов


//Attempted call from the main class to the BubbleSort method in the BubbleSort class 

     System.out.println(this.BubbleSort.BubbleSort()); 

// BubbleSort Класс

пакет основной;

общественного класса BubbleSort {

private static void BubbleSort(int[] num) { 
    for (int i = 0; i < num.length; i++) { 
     for (int x = 1; x < num.length - i; x++) { 
      if (num[x - 1] > num[x]) { 
       int temp = num[x - 1]; 
       num[x - 1] = num[x]; 
       num[x] = temp; 

ответ

0

Синтаксис вызова метода static является ClassName.methodName(args). Попробуйте:

int[] numbers = new int[10]; // Could be different size 
// Populate it somehow. 
BubbleSort.BubbleSort(numbers); 

Ваш код, используемый this, который является ссылкой на текущий объект, чей класс, вероятно, не имеет BubbleSort члена.

Кроме того, в настоящее время ваш метод private, поэтому он не может быть вызван ничем вне этого класса. Сделайте это public.

Кроме того, в нормальных соглашениях Java для методов именования указано, что первая буква должна быть строчной буквы, то есть метод bubbleSort для класса BubbleSort.

+0

Я постоянно получаю тот же сообщение об ошибке, как и прежде, сообщив мне, что нестатическая переменная не может быть указана из статического контекста и что переменная BubbleSort не найдена. Спасибо. – user3068177

+0

Метод BubbleSort будет конструктором в любом случае. И независимо от соглашений об именах или определений языков , имея имя метода, будет таким же, как имя класса, просто требует путаницы. – Teepeemm

0

BubbleSort объявлен как аргумент типа int[] и имеет модификатор доступа private. Вам нужно объявить его с модификатором доступа public и передать в качестве аргумента int[]. Создайте int[] array = new int[10], добавьте некоторые данные, используя цикл for и позвоните BubbleSort(array).

В условном коде Java имя класса должно начинаться с заглавной буквы, имя функции не должно. Пожалуйста, проверьте связанную страницу: Code Conventions for the Java TM Programming Language

0

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

Во-первых, синтаксис вызова static методов является ClassName.methodName(), так что в этом случай, вы хотите:

BubbleSort.BubbleSort(arguments); 

Во-вторых, ваш метод BubbleSort() принимает аргумент, в int[]. Вам нужно будет передать это.

В-третьих, ваш метод BubbleSort() объявлен как private, что означает, что он может быть вызван только из класса BubbleSort. Если вы намереваетесь вызывать этот метод вне класса BubbleSort, вам необходимо сделать метод public.

И, наконец, BubbleSort() имеет возврат void. System.out.println(BubbleSort.BubbleSort(intArray)) действительно не имеет большого смысла. Он вызовет метод (когда вы исправите все другие проблемы) и предположите, что метод верен, выполните сортировку пузырьков. И он напечатает строку ... но строка будет пустой. Поэтому, если вы собираетесь печатать что-то, вам нужно изменить тип возврата на String и вернуть строку, которую вы хотите распечатать.В противном случае имеет смысл просто не помещать его в System.out.println().

Также ... следуйте стандартным соглашениям об именах. Имена методов должны начинаться с строчной буквы и, вероятно, не должны совпадать с тем классом, в котором они содержатся (в частности, в Java, где это будет запутан как конструктор.

Смежные вопросы