Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
DatentypenArray-Einträge überhalb der Array-Länge - welcher Wert?
Ich habe vor, Einträge zweier Arrays miteinander zu multiplizieren. Das Problem ist jedoch noch, dass ich ggf. verschieden Lange Arrays habe und meine Formel nur für Arrays derselben Länge funktioniert - alle Einträge, die das eine Array weniger hat als das andere sollen also den Zahlen-Wert 0 haben.
Muss ich nun kompliziert ein neues Array erstellen oder hat ein "leerer" Array-Eintrag (also zum Beispiel der 5. Eintrag eines Arrays der Länge 4) automatisch den Wert Null?
Nein. Solltest du versuchen einen Index außerhalb der Arraygröße aufzurufen wird eine IndexOutOfBoundsException geschmissen.
Du musst deinen Algorithmus zum zusammenrechnen so schreiben das er kontrolliert ob der Index kleiner der Arraygröße ist, wenn nicht darfst du nicht auf das Array zugreifen sondern musst stattdessen direkt mit 0 rechnen.
Ach, und wo ich gerade hier bin, hab noch eine kurze Frage zu Arrays:
Ich erstelle das Array product
Java:
byte[] product = new byte[];
Müsste ich hier bereits die Länge des Arrays in der eckigen Klammer festlegen, bevor ich danach anfange die i-ten Einträge zu definieren oder brauche ich mich nicht weiter darum zu kümmern und am Ende hat das dann einfach die Länge i ?
Danke für die schnelle Antwort.
Dann werde ich entweder das kürzere Array in ein neues Array der Länge des längeren Arrays kopieren, und den übrigen Einträgen den Wert 0 zuweisen müssen oder, wie du schon sagst, den Algorithmus entsprechend abändern. Mal sehen, was schneller geht.
Kannst dir auch eine eigene Klasse erstellen, um das Array nach deinen Wünschen zu erweitern:
Java:
public class IntArray {
private final int[] data;
public IntArray(final int[] data) {
this.data = data;
}
public IntArray(final int length) {
this(new int[length]);
}
public IntArray multiply(final IntArray factor) {
final int max = Math.max(length(), factor.length());
final IntArray product = new IntArray(max);
for (int i = 0; i < max; i++) {
product.set(i, get(i) * factor.get(i));
}
return product;
}
public void set(final int i, final int e) {
if (isInBounds(i)) {
data[i] = e;
}
}
public int get(final int i) {
return isInBounds(i) ? data[i] : 0;
}
public int length() {
return data.length;
}
public boolean isInBounds(final int i) {
return i < length() && i >= 0;
}
public int[] getData() {
return data;
}
}
[EDIT]In diesem Fall kannst du dir aber auch zunutze machen, dass die Array-Einträge mit 0 initialisiert werden.
Daher reicht auch dieser simple Algorithmus:
Java:
public static int[] multiply(final int[] factor, final int[] factor2) {
final int min = Math.min(factor.length, factor2.length);
final int max = Math.max(factor.length, factor2.length);
final int[] product = new int[max];
for (int i = 0; i < min; i++) {
product[i] = factor[i] * factor2[i];
}
return product;
}
Je nach Ziel muss man sich überlegen, ob dort immer das gleiche Element verwendet werden sollte. Bei einer Addition würde man die "leeren" Elemente gerne als "0" annehmen, bei einer Multiplikation vielleicht eher als 1. (Also allgemein: Das neutrale Element bzgl. der jeweiligen Operation).