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;クラスから宣言を削除します。これをメイン メソッドに追加します。

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。そして、呼び出しparameterている に として渡します。method

配列をパラメーターとして別のメソッドに渡すと、その参照がパラメーターにコピーされるためです。したがって、メソッドで渡された配列に加えた変更はmain()、元の配列のメソッドに反映されます。これを使ってみてください。問題に直面することはないと思います。

更新: - OK、変更されたコードは次のとおりです: -

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 に答える