Не могу вызвать метод по какой-то причине - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь выполнить сортировку по бэблу, но также измеряю время, затрачиваемое на обработку, и первая проблема, которую я имею, заключается в том, что я не могу вызвать метод bubbleSort, даже если знаю, что все выглядит правильно для меня.Моя вторая проблема заключается в том, что long startTime = System.nanoTime ();отображается как не объявленный, но я объявил сверху мой код.

import java.util.Random;
import java.util.Scanner;
//import java.util.concurrent.TimeUnit;

// Program to calculate execution time or elapsed time in Java
class Main
{
private static Scanner scan;

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

    long startTime = System.nanoTime();

    // ... the code being measured starts ...

    scan = new Scanner(System.in);
    Random rand = new Random();
    int size;
    int num;
    int values[];

    System.out.println("What is the size of the array?");
    size = scan.nextInt();

    values = new int[size];
    System.out.println("The " + size + " random numbers are:");
    for(int c = 0; c < size; c++)
    {  
       num = rand.nextInt(100);
       System.out.print((values[c] = num) + " ");  
    }
      System.out.println("In order:");
      for (int count = 0; count < values.length; count++)
      System.out.println(count + " = " + bubbleSort(values[count]));
 }  

 public static void bubbleSort(int[] arr)
 {
    boolean swap;
    do
    {
       swap = false;
       int temp;
       for (int count = 0; count < arr.length - 1; count++)
       if (arr[count] > arr[count+1])
       {
          temp = arr[count];
          arr[count] = arr[count+1];
          arr[count+1] = temp;
          swap = true;


       }
     } while (swap);
       System.out.println("In order:");
       for (int count = 0; count < arr.length; count++)
              System.out.print(arr[count] + " ");
 }

 // ... the code being measured ends ...
 long endTime = System.nanoTime();
 long timeElapsed = endTime - startTime;
}

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Ваша переменная объявлена ​​внутри основной функции, что означает, что она будет видна только внутри основной функции.Попробуйте объявить это следующим образом:

class Main
{
private static Scanner scan;
long startTime;

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

    startTime = System.nanoTime();

    // ... the code being measured starts ...
[...]

Вторая проблема: вы пытаетесь напечатать вашу функцию-пузырь, как если бы она была строкой, но это просто пустая функция.

Редактировать: Я немного очистил ваш код:

import java.util.Random;
import java.util.Scanner;
//import java.util.concurrent.TimeUnit;

// Program to calculate execution time or elapsed time in Java
class Main {
    private static Scanner scan;
    static long startTime;

    public static void main(String[] args) throws InterruptedException {
        startTime = System.nanoTime();
        // ... the code being measured starts ...
        scan = new Scanner(System.in);
        Random rand = new Random();
        int size;
        int num;
        int values[];
        System.out.println("What is the size of the array?");
        size = scan.nextInt();
        values = new int[size];
        for (int c = 0; c < size; c++) {
            values[c] = rand.nextInt(100);
        }
        // print the random values
        System.out.println("The " + size + " random numbers are:");
        printValues(values);
        //Sort the array here:
        bubbleSort(values);
        //print the sorted values
        System.out.println("The " + size + " random numbers in order are:");
        printValues(values);
        // ... the code being measured ends ...
        long endTime = System.nanoTime();
        long timeElapsed = endTime - startTime;
        System.out.print("The algorithm took " + timeElapsed + " ns to terminate.");
    }

    public static void printValues(int[] values) {
        for (int count = 0; count < values.length; count++) {
            System.out.print(values[count] + " ");
        }
        System.out.println();
    }

    public static void bubbleSort(int[] arr) {
        boolean swap;
        do {
            swap = false;
            int temp;
            for (int count = 0; count < arr.length - 1; count++)
                if (arr[count] > arr[count + 1]) {
                    temp = arr[count];
                    arr[count] = arr[count + 1];
                    arr[count + 1] = temp;
                    swap = true;
                }
        } while (swap);
    }
}

Видите ли, я добавил функцию printValues ​​(), которая упрощает печать массива.Пожалуйста, посмотрите на этот код и постарайтесь понять его, если у вас есть вопросы, что вам делать!: D

0 голосов
/ 25 сентября 2019

Первая проблема, с которой я столкнулся, заключается в том, что я не могу вызвать метод bubbleSort

Код, который вы опубликовали, вызывает ваш метод bubbleSort следующим образом:

System.out.println(count + " = " + bubbleSort(values[count]));

Когда я вставил его в свою IDE, он показывает ошибку.Сигнатура метода для bubbleSort ожидает целочисленный массив - bubbleSort(int[] arr) - но эта строка выше пытается передать одно целочисленное значение.

Попробуйте передать весь массив values в bubbleSort(), а не простоединственное значение в values[count].Итак, вот что:

bubbleSort(values[count])

попробуйте это:

bubbleSort(values)

Отдельно не ясно, что вы намерены сделать с помощью оператора println - определено bubbleSort()ничего не возвращать (void), но вы пытаетесь добавить этот результат к вызову println(), который не является допустимым синтаксисом:

System.out.println(count + " = " + bubbleSort(...);

Если вы хотите печатать что-то вроде count = 4 каждый рази отдельно сортировать values каждый проход через цикл, это будет работать:

for (int count = 0; count < values.length; count++) {
    bubbleSort(values);
    System.out.println("count = " + count);
}
...