0

この質問に対する答えを探してみましたが、答えを見つける方法が正確にはわかりません。同じクラスで以前に宣言した要素を持つ配列に値を挿入しようとしています。私が知る限り、それは機能しません。要素は変更されますが、要素が表す元の変数は変更されません。これは、それらが同じ変数ではないためですか (配列はコピーか何かを作成しますか?これが理にかなっていることを願っていますが、そうでない場合は、サンプル コードを次に示します。

public class bucky {
public static void main(String args[]) {

    tuna tunaObject = new tuna();
    tunaObject.assignArray(25);
}
}

.

public class tuna {
int day;
int month;
int year;

int dateArray[] = {day, month, year};

void assignArray(int dayInput){
    dateArray[0] = dayInput;
    System.out.println(dateArray[0]);
    System.out.println(day);
 }
}

出力は次のとおりです: 25 0

したがって、明らかに日は変更されません。私はそれを望んでいますが、どうすればこれを機能させることができるのだろうか。

残念ながら遅いです。私はこれで何時間も働いています。つかれた。そして、時計がちょうど 1 時間巻き戻されたと確信しています.... これが機能しない理由に対する答えを知ることは、それだけの価値があることです。乾杯!

4

4 に答える 4

1

int値型であり、参照型ではないためdaydateArray値への参照ではなく実際の値を格納します。

day新しい値を同様に割り当てたい場合は、明示的に行う必要があります。

void assignArray(int dayInput){
    dateArray[0] = dayInput;
    day = dayInput;
}
于 2012-11-04T10:23:04.817 に答える
0

あなたは明らかにJavaに不慣れであり(Javaの規則が使用されていないことからわかるように)、この特定のケースでは、このポインタがJavaでは発生しないことを知っておく必要があります。

プリミティブ型(この場合は整数)は参照によって渡されるのではなく、値によって渡されます。

問題の解決策は、別の行を追加することです

day = dateInput
dateArray[0] = day

日の値を更新するたび。

于 2012-11-04T10:32:23.763 に答える
0

dayは class のインスタンス変数でTunaあり、配列は最初のインデックスで日付 (int 変数) を使用するだけの int 型です。そのため、dateArray は単に最初のインデックスで day の値を使用しています。

   int day=12;

    int dateArray[] = {day}; 

これで、dateArray の最初のインデックス値は 12 になります。

于 2012-11-04T10:19:40.623 に答える
0

dateArray を作成すると、日付、月、年の値をコピーして値に影響を与えます。それらは参照ではありません。そのため、配列の値を変更して属性を変更することを期待しないでください。

于 2012-11-04T10:23:25.693 に答える