ich muss innerhalb 1-2 Wochen mir einige Java Grundlagen für den Anfang des Studiums aneignen.
Nun meine aktuelle Aufgabe ist 2 Werte von Arrays durch eine Methode zu vertauschen. Die Methode habe ich swap genannt. Ich habe 2 Fehlermeldungen, die ich mit Kommentaren markiert habe. Ich komme seit Stunden nicht mehr weiter,d eshalb wende ich mich mal an das Forum hier.
Bitte so einfach wie möglich erklären, wenn ich was grundlegendes falsch mache, da ich Java seit ca 5 Tagen kenn und es für mich z.Z. sehr schwer fällt neue Sachen in Java zu lernen.
Alles was vor Zeile 23 kommt ist in der Form richtig.
Java:
importjava.util.Scanner;classArray{publicstaticvoid main (String args[]){int n, a, k, j;String wort;
a=0;Scanner sc =newScanner(System.in);
n=sc.nextInt();int zahl[]=newint[n];System.out.println("Index\tWert");for(int i=0; i<n; i++){zahl[i]=n-a; a++;}Array.printArray(zahl);System.out.println("Wollen sie 2 Werte vertauschen?");System.out.println("j/n");
wort=sc.nextLine();if(wort=="j"){System.out.println("Geben sie den ersten Index ein");
k=sc.nextInt();System.out.println("Geben sie den zweiten Index ein");
j=sc.nextInt();}Array.swap(zahl, k, j);//FehlermeldungArray.printArray(zahl);}publicstaticvoidprintArray(int[] zahl){int i;for(i=0; i<zahl.length; i++){System.out.println(i+"\t"+zahl[i]);}}publicstaticswap(int[] zahl,int k,int j){//Fehlermeldungint x, y;
zahl[k]=x;
zahl[j]=y;
x=x+y;
y=x-y;
x=x-y;return zahl[k]=x;return zahl[j]=y;}}
Es wäre ziemlich blöd, wenn man nur einen Wert rückgeben kann. Ich brauche ja eine Methode die 2 Werte vertauscht und dies dann im Array auch speichert. Wie kann ich denn diese Begrenzung umgehen?
Und wieso fehlt ein Rückgabetyp? Ich habe doch jeweils die Werte und den Datentyp in die Klammer hineingeschrieben.
Nein, das ist praktisch identisch mit dem was du vorher stehen hattest und macht keinen Unterschied.
Es wäre ziemlich blöd, wenn man nur einen Wert rückgeben kann. Ich brauche ja eine Methode die 2 Werte vertauscht und dies dann im Array auch speichert. Wie kann ich denn diese Begrenzung umgehen?
heißen wie FinalStriker bereits erwähnte,
2. Du musst in dieser Methode nichts zurückgeben, Arrays sind Objekte und wenn du Werte in diesem Array veränderst, dann wirkt sich das direkt auf das Ursprungsarray aus.
3. Du solltest wirklich grundlegende Grundlagen aneignen: Du deklarierst ein Feld und weist einem anderen Feld den Wert dieses Feldes zu, dabei hast du diesem Feld noch nichts zugewiesen.
Java:
int x, y;
array[k]= x;// x ist noch nicht deklariert
array[j]= y;// y ebenfalls!!!
Okay, danke! Ich hab jetzt geschafft das Programm auszuführen und es funktioniert auch fast. Das fast bezieht sich darauf, dass ich nur einmal was in der Konsole schreiben kann und nicht mehrmals.
Woran könnte das liegen? Das Problem tritt ab Zeile 21 auf.
Hier nochmal das bearbeitete Programm:
Java:
importjava.util.Scanner;classArray{publicstaticvoid main (String args[]){int n, a;String wort;
a=0;Scanner sc =newScanner(System.in);
n=sc.nextInt();int zahl[]=newint[n];System.out.println("Index\tWert");for(int i=0; i<n; i++){zahl[i]=n-a; a++;}Array.printArray(zahl);System.out.println("Wollen sie 2 Werte vertauschen?");System.out.println("j/n");
wort=sc.nextLine();if(wort.equals("j")){Array.swap(zahl);Array.printArray(zahl);}}publicstaticvoidprintArray(int[] zahl){int i;for(i=0; i<zahl.length; i++){System.out.println(i+"\t"+zahl[i]);}}publicstaticvoidswap(int[] zahl){int x, y, k, j;Scanner sc =newScanner(System.in);System.out.println("Geben sie den ersten Index ein");
k=sc.nextInt();System.out.println("Geben sie den zweiten Index ein");
j=sc.nextInt();
x=zahl[k];
y=zahl[j];
x=x+y;
y=x-y;
x=x-y;
zahl[k]=x;
zahl[j]=y;}}
Das fast bezieht sich darauf, dass ich nur einmal was in der Konsole schreiben kann und nicht mehrmals.
Woran könnte das liegen? Das Problem tritt ab Zeile 21 auf.
importjava.util.Scanner;/**
* @author hüte
*/publicclassArrayAction{publicstaticvoidmain(String args[]){int n, a;String wort;
a =0;Scanner sc =newScanner(System.in);
n = sc.nextInt();
sc.nextLine();int zahl[]=newint[n];System.out.println("Index\tWert");for(int i =0; i < n; i++){
zahl[i]= n - a;
a++;}printArray(zahl);do{System.out.println("Wollen sie 2 Werte vertauschen?");System.out.println("j/n");
wort = sc.nextLine();if(wort.equals("j")){swap(zahl);printArray(zahl);}else{break;}}while(true);}publicstaticvoidprintArray(int[] zahl){for(int i =0; i < zahl.length; i++){System.out.println(i +"\t"+ zahl[i]);}}publicstaticvoidswap(int[] zahl){int x, y, k, j;Scanner sc =newScanner(System.in);System.out.println("Geben sie den ersten Index ein");
k = sc.nextInt();System.out.println("Geben sie den zweiten Index ein");
j = sc.nextInt();
x = zahl[k];
y = zahl[j];
x = x + y;
y = x - y;
x = x - y;
zahl[k]= x;
zahl[j]= y;}}
Ich finde diese Konsolenanwendungen wirklich... naja.
Die static Methoden von JOptionPane bieten wirklich so viele Sachen, dass man gänzlich auf System.in verzichten kann.
Also ich sehe keinen Grund, nicht JOptionPane.showInputDialog("Index 1"); statt
Gerade für den Anfang ist das Arbeiten mit Streams wichtig. JOptionPane ist eher ein Mogelpackung. Bevor man sie benutzt, sollte man mit Streams vertraut sein. Am besten ist es, wenn man mit BufferedReader beginnt