-2

目標 -

いくつかの関数でクラスを作成してみてください-配列を作成し、それでいくつかの操作を行います今、私はそのユーザーが配列の長さを入力し、プログラムがそれをユーザーに返すことを望みます

何をしたの?-

作成されたクラス:

public class Array {
    private int myArray[];
    private int count;

    Array(int length){
        myArray = new int[length];// create mas of diff length
        count =0 ; // count q-ty of elements
    }

    //array out
    public static void outArray(int array[]){
        int length = array.length;
        for (int i=0; i<length+1; i++){
            System.out.println("Element number ["+i+"] is ["+ array[i]+"]");
        }
    }

そしてメイン:

public static void main(String[] args) throws IOException {
    System.out.println("What length of your array? []");
    Array matrix = new Array(Array.getCharToInt());
    Array.outArray(matrix);
....

何があったの -

ここで私はいくつかの問題を抱えていますArray.outArray(matrix);

質問 -

どこで間違えたの?また、多くのバリエーションを試してみてください、しかし私が間違っていることを理解することはできません。


配列インスタンスを取得するための関数を変更しましたが、メソッドに問題があります..-配列の長さを取得できません`

Array(int length){
    myArray = new int[length];// create mas of diff length
    int myLength=myArray.length;
}

//array out
public static void outArray(Array array){
    int length = array.myLength; - cant do like this - "myLength cannot be resolved or is not a field".

コンストラクターにいくつかのフィールドを追加すると、それを使用できると思いますか、それとも何か間違ったことをしていますか?

4

2 に答える 2

1

配列を定義する正しい方法は次のとおりです。

private int[] myArray;

したがって、コンストラクターとクラスは次のようになります。

public class Array {
private int[] myArr;
private int count;

public Array(int length) {
    myArr = new int[length];
    count = 0;
}

public int[] getInnerArray() {
    return myArr;
}

public static void processArray(Array array) {
    int[] innerArray = array.getInnerArray();
    int length = innerArray.length;
    for (int i=0; i<length; i++) {
        System.out.println("Next [" + i + "] is - " + innerArray[i]);
    }
}

ただし、uはpublic static void processArray(Array array)メソッドをインスタンスメソッドに変更することもできます。

 public void processArray() {
    int[] innerArray = myArr;
    int length = innerArray.length;
    for (int i=0; i<length; i++) {
        System.out.println("Next [" + i + "] is - " + innerArray[i]);
    }
}

主な機能は次のとおりです。

public static void main(String[] arg) {
    System.out.println("What length of your array? []");
    Array matrix = new Array(666);
    matrix.processArray();
}
于 2013-02-18T21:18:57.203 に答える
1

まず、PerceptionとJavaからの投稿を注意深く読むことをお勧めします。「myLengthを解決できないか、フィールドではない」という問題の場合、array.myLengthを呼び出しているためです。myLengthは、Arrayクラスが呼び出されたときに作成した変数です。クラスの新しいインスタンスを呼び出すたびに、それらが分離されることに注意してください。クラス内とは異なるメソッドを使用する場合は、メインのProjectクラスにそのクラスのインスタンスを作成します。つまり、使用されないArrayクラスのプライベート変数宣言も使用しています。

また、java.lang.reflect.Arrayにはすでに「Array」という名前のクラスがあります。クラス内のメソッドをオーバーライドせずに独自のクラスを作成しようとしている場合は、Arrayクラスの名前を変更することも検討してください。次に、次のようなことを行います。

public static void main(String[] args) throws IOException {
MyArrayClass mAC = new MyArrayClass;
System.out.println("What length of your array? []");
int[] matrix = new int[mAC.getCharToInt()];
mAC.outArray(matrix);

次に、outArrayメソッドを次のように変更します

public static void outArray(int array[]){
int length = array.length;
for (int i=0; i<length; i++){
System.out.println("Element number ["+i+"] is ["+ array[i]+"]");
}

私はプライベート変数を使用するのが好きです。あなたは使用しようとしましたが、変数に到達するためのgetterメソッドとsetterメソッドも実装する必要があります。

于 2013-02-18T21:29:31.707 に答える