我的任务是编写一个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()
中本地定义数组感谢。
答案 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];
并将其从类变量声明中删除。