myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [Java] Fehler beim kompilieren (https://mygully.com/showthread.php?t=2168003)

Fighter3 21.11.10 21:20

[Java] Fehler beim kompilieren
 
Hey, wenn ich den folgenden Code:

Zitat:

public class drehung2 {
public static int z = 5;
public static void belegung (int [][] matrix){
int wert=1;
for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix.length; j++){
matrix [i][j] = wert;
wert++;
}
}
}
public static void ausgabe (int [][] matrix){
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++)
System.out.print(matrix[i][j]+"\t");
System.out.println();
}
System.out.println();
}
public static void drehung (int [][] quadrat2, int [][] quadrat1){
int speicher;
int a;
int d;
for (d=z; z>=0; z--){
for (a=0; a>=z; a++){
speicher = quadrat1 [d][d];
quadrat2 [0][a] = quadrat1 [d][0];
quadrat2 [a][d] = quadrat1 [0][a];
quadrat2 [d][d] = quadrat1 [a][d];
quadrat2 [d][0] = speicher;
}
}

}
public static void main (String[]args){
int [][] quadrat1 = new int [z][z];
int [][] quadrat2 = new int [z][z];

belegung (quadrat1);
ausgabe (quadrat1);
drehung (quadrat2);
ausgabe (quadrat2);
}
}

immer wieder den Fehler:

Zitat:

Compiliere C:\Users\xxx\Desktop\drehung2.java mit Java-Compiler
drehung2.java:41:9: drehung(int[][],int[][]) in drehung2 cannot be applied to (int[][])
drehung (quadrat2);
Jemand 'ne Idee wie ich den beheben kann?

Wäre sehr nett!
Vielen Dank

PornoPenner 21.11.10 22:05

Ist schon von Vorteil, wenn Du englisch kannst.

Ich übersetze es mal auf deutsch:

Die Methode mit zwei Argumenten "drehung(int[][],int[][])" der Klasse "drehung2" kann nicht mit nur einem Argument aufgerufen werden wie in "drehung (quadrat2);"

Fighter3 21.11.10 22:31

Danke erstmal für die Antwort!

Englisch kann ich übrigens, wenn auch nicht gerade perfekt ;) Was der Fehler bedeutet ist mir im übrigen auch klar, deshalb fragte ich auch danach wie ich diesen lösen könnte.

Jester2 21.11.10 23:24

Servus Fighter,

aufgrund deiner Antwort auf den Post über dir nehme ich mal, dass die Antwort wenig hilfreich war. Was übrigens einer der Gründe ist, warum ich die Beiträge des Kandidaten ausgeblendet habe (Gott sei Dank!).

Nun aber zu deinem Problem. In deiner Methode drehung hast du definiert, dass 2 Parameter übergeben werden müssen. Beim Aufruf in main hast du jedoch nur einen Parameter übergeben.

Code:

drehung(quadrat2);
Du musst das so korrigieren, dass du den 2. auch noch übergibst. Ich vermute du wolltest das 1. Quadrat auch noch übergeben. Du musst also den Code nur so anpassen:

Code:

drehung(quadrat2, quadrat1);
Gruß
Jester

PornoPenner 22.11.10 00:00

Zitat:

Zitat von Jester2 (Beitrag 21565581)
Servus Fighter,

aufgrund deiner Antwort auf den Post über dir nehme ich mal, dass die Antwort wenig hilfreich war. Was übrigens einer der Gründe ist, warum ich die Beiträge des Kandidaten ausgeblendet habe (Gott sei Dank!).

Nun aber zu deinem Problem. In deiner Methode drehung hast du definiert, dass 2 Parameter übergeben werden müssen. Beim Aufruf in main hast du jedoch nur einen Parameter übergeben.

Code:

drehung(quadrat2);
Du musst das so korrigieren, dass du den 2. auch noch übergibst. Ich vermute du wolltest das 1. Quadrat auch noch übergeben. Du musst also den Code nur so anpassen:

Code:

drehung(quadrat2, quadrat1);
Gruß
Jester

Genau das habe ich in einem Satz auch erklärt...

Banghard 22.11.10 03:07

Zitat:

Zitat von PornoPenner (Beitrag 21565656)
Genau das habe ich in einem Satz auch erklärt...

Genau genommen hast du einfach nur übersetzt und nichts zusätzlich erklärt. Aber nix für ungut ;)

PornoPenner 22.11.10 11:10

Zitat:

Zitat von Banghard (Beitrag 21565793)
Genau genommen hast du einfach nur übersetzt und nichts zusätzlich erklärt. Aber nix für ungut ;)

Ich ging auch davon aus, dass das Mindestmaß an kognitiven Fähigkeiten bei der entsprechenden Person vorhanden sind. Na ja, dann habe ich mich da wohl verschätzt.

Fighter3 22.11.10 21:16

Danke für die Hilfe! Genau das war der Fehler!

Ich musste nun noch etwas an dem Code verändern und bekomme jetzt noch einen anderen Fehler. Das Programm lässt sich zwar kompilieren, anstatt der richtigen Ausgabe kommt der Fehler:
java.lang.ArrayOutOfBoundsExeption

Zitat:

public class drehung2 {
final static int z = 4; //Größe der Matrix bestimmen
public static void belegung (int [][] matrix){
int wert=1;
for (int i = 0; i < matrix.length; i++){ //Belegung der ersten Matrix
for (int j = 0; j < matrix.length; j++){
matrix [i][j] = wert;
wert++;
}
}
}
public static void ausgabe (int [][] matrix){ //Ausgabemethode
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++)
System.out.print(matrix[i][j]+"\t");
System.out.println();
}
System.out.println();
}
public static void drehung (int [][] quadrat2){ //Drehmethode um 90°
int speicher;
int a;
int d = 4;
int wert=1;
for (int i = 0; i < quadrat2.length; i++){ //Belegung der ersten Matrix
for (int j = 0; j < quadrat2.length; j++){
quadrat2 [i][j] = wert;
wert++;
}
}
for (a=0; a<=d; a++){ //Variable die nie größer als die Länge der Matrix ist
speicher = quadrat2 [0][d-a]; //Wert in den Speicher übergeben
quadrat2 [0][d-a] = quadrat2 [0][0]; //Übergabe von Werten
quadrat2 [0][0] = quadrat2 [d][a];
quadrat2 [d][a] = quadrat2 [d-a][d];
quadrat2 [d-a][d] = speicher; //Wert aus dem Speicher auslesen
}


}
public static void main (String[]args){
int [][] quadrat1 = new int [z][z]; //Initialisierung von erster Matrix (normale Belegung)
int [][] quadrat2 = new int [z][z]; //Initialisierung von zweiter Matrix (gedreht)

belegung (quadrat1);
ausgabe (quadrat1);
drehung (quadrat2);
ausgabe (quadrat2);
}
}
Jemand noch 'ne Idee?

Xalir 22.11.10 21:51

Ich würd mal spontan tippen, Dein Array ist außerhalb der Grenzen. Den Fehler, den Du machst ist ganz einfach: Arrays beginnen mit index(0) und nicht index(1).

Jester2 22.11.10 22:56

Zitat:

Zitat von Xalir (Beitrag 21569426)
Ich würd mal spontan tippen, Dein Array ist außerhalb der Grenzen. Den Fehler, den Du machst ist ganz einfach: Arrays beginnen mit index(0) und nicht index(1).

So sieht es aus. Du initialisiertst dein Array mit [4][4]. Ein Zugriff auf das erste Element im Array beginnt immer mit [0] und endet in deinem Fall mit [3] -> also 4 Elemente. Deine Variable d wird allerdings mit 4 initialisiert. Wenn du nun
Code:

speicher = quadrat2[0][d - a];
aufrufst, wird für den ersten Scheifendurchlauf folgendes gemacht:
a=0
d=4
somit 4-0=4 also:
Code:

speicher = quadrat2[0][4];
Da dein Array aber nur 4 Elemente hat und versuchst auf das 5. zuzugreifen, geht das natürlich in die Hose.
Am besten initialisierst du d so:
Code:

int d = z-1;
Solltest du auf die Idee kommen die Göße der Matrix (z) zu ändern, hat das dann keine Auswirkung auf deine Schleife.

Gruß
Jester

Fighter3 23.11.10 17:01

Okay, das habe ich verstanden. Problem ist nur, dass die Matrix in ihrer Größe veränderbar sein muss.

Wie könnte ich den Code denn dann anpassen, dass der generell stimmt. (also z.B. auch für 10 Spalten und 10 Zeilen)?

Jester2 23.11.10 22:25

Zitat:

Zitat von Fighter3 (Beitrag 21572095)
Okay, das habe ich verstanden. Problem ist nur, dass die Matrix in ihrer Größe veränderbar sein muss.

Wie könnte ich den Code denn dann anpassen, dass der generell stimmt. (also z.B. auch für 10 Spalten und 10 Zeilen)?

Habe ich dir doch schon geschrieben:
Code:

int d = z-1;
anstatt
Code:

int d = 4;
Gruß
Jester


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.