Elemente in Arrays (java) einfügen?
Hallo! Hier habe ich ein bisschen mit Arrays rumgespielt. Es soll eine 0 in das kopierte Array vor der jeweiligen Zahl eingesetzt werden, wenn diese kleiner als 10 ist. Wenn die Zahl größer als 10 ist, dann wird eine 1 vor die jeweilige Zahl gesetzt.
Wäre so ein Lösungsansatz akzeptabel oder haben sich Fehler eingeschlichen?
Muss dazu sagen, dass ich ein Anfänger bin :)
Danke im Vorraus!
Der Code lautet:
public class Array {
public static void main (String[] args){
Array arrayListe = new Array();
int[] liste = {5, 20, -9};
int[] rueckgabe = Array.veraendereArray[liste];
for(int element : rueckgabe){
System.out.println(element);
}
}
public static int [] veraendereArray(int[] liste){
int[] rueckgabe = new int[liste.length+4];
for(int i = 0; i <= liste.length; i++){
if(element <10){
rueckgabe[i+1]=0;
}
else{
rueckgabe[i+1] =1;
}
}
}
}
2 Antworten
Zu deiner Lösung:
Du kopierst deine Werte nicht. Auch sehe ich keinen Sinn darin den Wert des Arrays bei Iterator+1 auf 0 oder 1 zu setzen.
Zudem wird ein ganzer Teil des rueckgabe-Arrays nicht von deinem Algorithmus behandelt (z.B. Index 0 oder der letzte Index).
Außerdem versuchst du von deiner Methode auf "element" zuzugreifen. Auf "element" kannst du nur in deiner Methode und spezifisch NUR in deiner foreach-Schleife zugreifen.
Notation: Du brauchst deine Klasse nicht zu initalisieren, da dur nur statische Methoden verwendest. Das "new Array()" würde somit wegfallen. Zudem würde, zumindest ich, es nicht wie ein bekannten Datentypen nennen. Falls du allerdings wirklich Attribute hast, solltest du die vll. auslagern in eine eigene Klasse auslagern (ich finde main in einer Klasse die instanziiert werden soll n bissl gruselig).
Meine Meinung:
Ich würde kein int-Array zurückgeben, da die 0 nicht ohne weiteres dargestellt werden kann. So wirste mit dem Array nicht "-09" bekommen darstellen können (sofern es gefordert ist).
Implementierung meinerseits:
public static String[] veraendereArray(int[] intArr){
String[] retArr = new String[intArr.length];
for(int i=0;i<intArr.length;i++){
if(intArr[i]<0&&intArr[i]>-10){
retArr[i]="-0" + (intArr[i]*(-1));
}
else if(intArr[i]<-10){
retArr[i]="-1" + (intArr[i]*(-1));
}
else if(intArr[i]<10&&intArr[i]>0){
retArr[i]="0"+intArr[i];
}
else if(intArr[i]>10){
retArr[i]="1"+intArr[i];
}
else{
retArr[i]="0";
}
}
return retArr;
}
Die Rückgabe für dein Beispiel sollte
{05,120,-09}
sein.
Naja das geht schon, allerdings kannst du dabei das Array nicht verändern, wenn es sich um int-Werte handelt oder zumindest wüsste ich nicht wie man aus "-9" "-09" (als Integer) machen sollte, da man dazu die 0 in den Eintrag vor der 9 schreiben müsste usw. Zudem hängt es davon ab, ob überhaupt negative Zahlen ebenso verändert ausgegeben werden sollen wie die positiven.
Wenn du eine reine Ausgabe haben willst ohne ein zweites Array zu haben, könntest du auch das Beispiel das ich geschrieben habe umarbeiten und direkt die Ausgabe treffen statt es erst in ein String-Array zu schreiben.
Beispiel:
System.out.println("-0" + (intArr[i]*(-1)));
Zuerst einmal haben sich einige grundlegende Fehler bei dir eingeschlichen.
a) Um eine Methode aufzurufen, ist eine Argumentliste notwendig, ein Indexer ist falsch.
int[] rueckgabe = Array.veraendereArray[liste]; // wrong
int[] rueckgabe = Array.veraendereArray(liste); // right
b) Die Variable element ist in dem Kontext der Methode veraendereArray überhaupt nicht bekannt. Stattdessen müsstest du die Elemente der Liste aufrufen:
if (liste[i] < 10) {
c) Ein Array hat bei n Elementen nur einen Index bis n - 1. Daher führt dies dann zu einer IndexOutOfBoundException:
for (int i = 0; i <= liste.length; i++) {
if (liste[i] < 10) {
d) Die Methode veraendereArray definiert zwar einen Rückgabetyp, gibt aber nichts via return-Befehl zurück.
e) Kein Fehler, kann aber dennoch raus - die Variable arrayListe. Das Objekt wird überhaupt nicht verwendet.
Nun zur Logik:
Die von dir beschriebenen Anforderungen passen nicht zu dem, was das Programm macht. Wenn etwas vor ein Element gesetzt werden soll, sollte eher -1 gerechnet werden. Außerdem setzt du die alten Elemente nicht wieder ein, sondern erhöhst lediglich das neue Array willkürlich um 4 Elemente. Das ist unflexibel gegenüber verschiedenen Arrays, die du der Methode später einmal übergeben könntest.
Ich würde es daher so abändern:
- Array in der Größe verdoppeln
- Durch altes Array laufen, aber mit 2 Zählern (einer zählt immer +1 für die alte und einer +2 für die neue Liste)
- Aktuelles Element des alten Arrays prüfen und je nachdem 0 / 1 in das Resultat einfügen
- Die alte Zahl in das Resultat einfügen
Ergebnis:
public static int [] changeArray(int[] list) {
int[] result = new int[list.length * 2];
for (int i = 0, j = 0; i < list.length; ++i, j += 2) {
if (list[i] < 10) {
result[j] = 0;
}
else {
result[j] = 1;
}
result[j + 1] = list[i];
}
return result;
}
Danke für die Antwort, echt hilfreich!
Aber wie würde es aussehen, wenn die Ausgabe vor der jeweiligen Zahl stehen soll? Also das ist eine Aufgabe, die so gestellt wurde.
Wie ist das zu verstehen? Sollte das Ergebnis dann so aussehen?
{05, 120, 0-9} // a
Oder so?
{5, 120, -9}
Funktioniert das denn garnicht, dass 0 oder 1 vor dem Wert ausgegeben wird? So ist nämlich die Aufgabenstellung