私はかなりJavaに慣れていますので、私は5歳で、5歳に適した答えが必要です。メソッド内の配列の長さを取得できません
まず、いくつかの情報: は私が成長し、必要なときに縮む「動的配列」を作るしようとしています。私はarraylistsの知っている、これの目的は、私はこれがどのようにとにかく仕事をしていると仮定しているので、私は自分自身でこれを行うことができ、同時に学ぶ必要があるということです。
問題:私は上記の理由の1つは、配列全体の平均値を計算することですファンシーな方法を追加したいと思います。 長さ(varible.length
)を取得しようとすると、他のいくつかの方法では機能しません。
これは動作しない方法である:
public double meanValue() {
double meanDiv = 0;
int div = x.length;
for (int i = 0 ; i < div ; i++) {
meanDiv += x[i];
System.out.println("Testing");
}
meanDiv = meanDiv/x.length;
return meanDiv;
}
それはNaN(非数)を返していますが、あなたはそれが0を返す分割部分をスキップ場合、それは完全にx.length
を読んでいません。
最悪の部分?いくつかの方法は、最後の位置を返すために、たとえば、これを作業している:
public long last() {
long pepe = -1;
if (x.length==0) {
System.out.println("Nothing in the array! Returning -1");
}
else {
pepe = x[x.length-1];
}
return pepe;
}
代わりのための間、私は、あまりにも多くのもの、変数の異なる種類を試してみた、など
をここにありますクラス全体が必要な場合:
public class dynamicArray {
private long[] x;
private int size = 0;
public dynamicArray() {
x = new long[size];
} // CREATES THE ARRAY
public long grab(int x) {
if (x < this.x.length) {
return this.x[x];
}
else {
System.out.println("(GET) Out of bounds");
return -1;
}
}
public void add(long value) {
dynamicInAction();
x[size] = value;
size++;
} // ADD A NUMBER TO THE ARRAY
public void remove(int position) {
} // REMOVES A SPECIFIC ARRAY POSITION----------------
public long last() {
long pepe = -1;
if (x.length==0) {
System.out.println("Nothing in the array! Returning -1");
}
else {
pepe = x[x.length-1];
}
return pepe;
} // RETURNS THE VALUE IN THE LAST POSITION
public long first() {
long pepe = -1;
if (x.length==0) {
System.out.println("Nothing in the array! Returning -1");
}
else {
pepe = x[0];
}
return pepe;
} // RETURNS THE VALUE IN THE FIRST POSITION
public void modify(int position, int value) {
if (position < x.length && position >= 0) {
x[position] = value;
}
else {
System.out.println("This position does not exist");
}
} // MODIFIES A SPECIFIC POSITION TO THE ASSIGNED VALUE
public int size() {
return x.length;
} // RETURNS THE CURRENT ARRAY SIZE
public double meanValue() {
double meanDiv = 0;
int div = x.length;
for (int i = 0 ; i < div ; i++) {
meanDiv += x[i];
System.out.println("Testing");
}
meanDiv = meanDiv/x.length;
return meanDiv;
} // RETURNS THE MEAN VALUE OF THE WHOLE ARRAY-------------
public long median() {
return -1;
} // RETURNS THE MEDIAN VALUE OF THE WHOLE ARRAY-------------
private void dynamicInAction() {
if (x.length == size) {
long[] temp = new long[x.length];
for (int i = 0; i<x.length ; i++) {
temp[i] = x[i];
}
x = null;
//System.gc(); // Might be unnecessary
x = new long[size+1];
for (int i = 0; i<temp.length ; i++) {
x[i] = temp[i];
}
}
} // ENSURES THE ARRAY GROWS WHEN NEEDED
public void reverse() {
} // REVERSING ALL POSITIONS IN THE ARRAY------------------
public void clear() {
x = null;
size = 0;
x = new long[size];
} // CLEARS THE ARRAY
}
私にとってはうまく動作します。おそらく、テストしているデータを含め、問題を示す実行可能な例を提供する必要があります。 – MadProgrammer
テストしていたとき、少なくとも1つの要素が配列に含まれていましたか? –
@ImeshaSudasinghaそれは問題だった、間違って全体のリストをクリアしました。ありがとう、申し訳ありません。 – FREEDOM