1

我的任务是编写一个 Java 类,它创建一个整数数组,用值填充它,打印未排序的值,按升序对值进行排序,最后打印排序后的值。

在大多数情况下,我已经做到了,我的输出很好。但是,我无法在 main() 中本地定义数组,并将其作为参数传递给其他方法。我尝试将其定义为无法完成的类的静态成员。

谁能帮我吗?我需要在 main() 中定义数组并将其作为参数传递给方法。但是,尽管进行了不懈的研究,我还是无法弄清楚。

这是我到目前为止所拥有的。

public class ArraySort {
private static Object sc;
       int[] array;

// creates question and int for user input
/**
 *
 */
public void fillArray() {
    Scanner keyboardScanner = new Scanner(System.in);
    System.out.println("Enter the size of the array (3 to 10): ");
    int n = keyboardScanner.nextInt();
    array = new int[n];

    // creates new question by including int 
    System.out.println("Enter " + n + " values" );

    // creates for loop for repeating question based on array size 
    for (int i=0; i<n; i++) {
        System.out.println("Enter value for element " + i + ": ");
    array[i] = keyboardScanner.nextInt();
    }
}

// prints i in the for loop
public void printArray(String msg) {
    System.out.println(msg);
    for (int i=0; i<array.length; i++) {
        System.out.println(array[i]);
    }
}

//  defines method
public void sortArray() {
    // sets up to output in ascending order
    for (int i=0; i<array.length; i++) {
        for (int j=i+1; j<array.length; j++) {
            if (array[i] > array[j]) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}



// main output and visual layout
public static void main(String[] args) {
    ArraySort arraySort = new ArraySort();
    arraySort.fillArray();


    System.out.println();
    arraySort.printArray("The unsorted values... ");
    arraySort.sortArray();
    System.out.println();
    arraySort.printArray("The sorted values... ");




    // Keep console window alive until 'enter' pressed (if needed).
    System.out.println();
    System.out.println("Done - press enter key to end program");



 }
}

我没有错误,我只需要有关如何在 main() 中本地定义数组的帮助

谢谢。

4

4 回答 4

1

从类中删除int[] array;声明。将其添加到 main 方法中:

int[] array = new int[n];

int[] array并为每个需要访问它的方法添加一个参数。例如:

public void printArray(String msg, int[] array) {
    ...
}
于 2012-10-17T19:40:09.893 回答
0

您说过您需要在 main() 中定义数组并将其作为参数传递给方法。如果是这样,那么您将需要更改这些方法,例如:

public void printArray(String msg, int[] argsArray)

public void sortArray(int[] array)

fillArray是不同的,因为您在方法中根据用户输入的大小创建数组,所以您不能简单地将数组作为参数传递。您可以返回新数组:

public int[] fillArray()
{
    int[] array;
    // ...

    return array;
}

但是,如果您只是想测试您的课程,请注意您可以ArraySort.array从 访问该字段main:您可以将该字段设置为您在 中创建的数组main

所以主要是:

ArraySort arraySort = new ArraySort();
arraySort.array = new int[]{ 5, 4, 3, 6, 7};

// and remove the fillArray call 
// ...

请注意,如果您想这样设置array,那么您还应该删除fillArray调用,该调用尝试根据用户输入的值设置数组。

于 2012-10-17T19:40:12.953 回答
0

您可以array locally在您的main方法中声明您的。并将其作为 a 传递parametermethod您正在调用的对象。

因为当您将数组作为参数传递给另一个方法时,它的引用将被复制到参数中。因此,您对方法中传递的数组所做的任何更改都会反映在main()原始数组中的方法中。尝试使用这个。我不认为你会遇到任何问题。

更新:-好的,这是修改后的代码:-

import java.util.Scanner;

public class ArraySort {
private static Object sc;    
private static Scanner keyboardScanner = new Scanner(System.in);

// creates question and int for user input
/**
 *
 */
public void fillArray(int[] array) {

    // creates for loop for repeating question based on array size 
    for (int i=0; i<array.length; i++) {
        System.out.println("Enter value for element " + i + ": ");
        array[i] = keyboardScanner.nextInt();
    }
}

// prints i in the for loop
public void printArray(String msg, int[] argsArray) {
    System.out.println(msg);
    for (int i=0; i<argsArray.length; i++) {
        System.out.println(argsArray[i]);
    }
}

//  defines method
public void sortArray(int[] array) {
    // sets up to output in ascending order
    for (int i=0; i<array.length; i++) {
        for (int j=i+1; j<array.length; j++) {
            if (array[i] > array[j]) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }

}

// main output and visual layout
public static void main(String[] args) {

    System.out.println("Enter the size of the array (3 to 10): ");
    int n = keyboardScanner.nextInt();

    int[] array = new int[n];

    ArraySort arraySort = new ArraySort();
    arraySort.fillArray(array);

    System.out.println();
    //I still get an error saying " cannot find symbol"
    arraySort.printArray("The unsorted values... ", array);
    //same here
    arraySort.sortArray(array);

    System.out.println();
    //and here
    arraySort.printArray("The sorted values... ", array);


    // Keep console window alive until 'enter' pressed (if needed).
    System.out.println();
    System.out.println("Done - press enter key to end program");

}
}
于 2012-10-17T19:40:28.083 回答
0

更新public void printArray(String msg) {public void sortArray() {接受int []

  / prints i in the for loop
 public void printArray(String msg, int[] argsArray) {
    System.out.println(msg);
    for (int i=0; i<argsArray.length; i++) {
        System.out.println(argsArray[i]);
    }
 }

 //  defines method
 public void sortArray(int[] argsArray) {
   // sets up to output in ascending order
   for (int i=0; i<argsArray.length; i++) {
    for (int j=i+1; j<argsArray.length; j++) {
        if (argsArray[i] > argsArray[j]) {
            int temp = argsArray[i];
            argsArray[i] = argsArray[j];
            argsArray[j] = temp;
        }
      }
   }
 }

你可能想留array = new int[n];fillArray当地:

    int[] array = new int[n];

并将其从类变量声明中删除。

于 2012-10-17T19:43:15.710 回答