无法在本地定义数组并将参数传递给其他方法

时间:2012-10-17 19:36:02

标签: java arrays sorting methods parameters

我的任务是编写一个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 个答案:

答案 0 :(得分:1)

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

int[] array = new int[n];

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

public void printArray(String msg, int[] array) {
    ...
}

答案 1 :(得分: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字段:您可以将字段设置为您在{中创建的数组{1}}。

所以主要是:

main

请注意,如果您要像这样设置ArraySort arraySort = new ArraySort(); arraySort.array = new int[]{ 5, 4, 3, 6, 7}; // and remove the fillArray call // ... ,那么您还应该删除array调用,该调用会尝试根据用户输入的值设置数组。

答案 2 :(得分:0)

您可以在array方法中声明locally main。并将其作为parameter传递给您正在呼叫的method

由于将数组作为参数传递给另一个方法时,其引用将被复制到参数中。因此,您在方法中对传递的数组所做的任何更改都会反映在原始数组中的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");

}
}

答案 3 :(得分: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];

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