Array problem bei einem magischen Quadrats

node

Mitglied
Moin Leute,
ich hab ein kleines Problem mit einer Aufgabe ich soll magisches Zahlenquadrat, mit variabler aber ungerader Seitenlänge, erstellen. Viele von euch werden sich jetzt sicher sagen nicht schon wieder. Ich denke das ich schon so gut wie fertig bin hab aber ein Problem mit dem Array.

Ich hoffe Ihr könnt mir helfen den Fehler in meinem Code zu finden.

das hier ist die fehlermeldung ich denke das die aktion die ich ausführe über die grenzen des arrays hinausgeht.

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
	at mw.main(mw.java:32)

Java:
import java.util.InputMismatchException;
import java.util.Scanner;

public class mw {

	public static void main(String [] args){
		int in=0, row=0, col=0, kantLaeg=0, i;
		int[][] quadAr = {null};
		
		while(true){
			try{
				Scanner eingabe = new Scanner(System.in);
				in=eingabe.nextInt();
				
				kantLaeg=in;

			//prüfen ob die zahl ungerade und größer als eins ist
				if((in%2)!=0 && in>1){
					//erstellen des array
					quadAr = new int[in][in];
					
					for(i=1; i<=kantLaeg*kantLaeg; i++){
						//mitteln der eins
						if(i==1){
							col=kantLaeg/2;
							quadAr[row][col]=1;
						}

						//fall zahl ist die eingegeben zahl oder ein vielfaches von ihr
						if((kantLaeg-1)%i==0) {	
							row--;
							quadAr[row][col]=i;
						}else{
							//oberste zeile und noch weiter
							if(row==0 && i!=1) {	
								row=row + (kantLaeg-1);
								col++;
							}
							//letzte spalte ist erreicht
							if(col==(kantLaeg-1) && i!=1) {	
								row++;
								col=col+(kantLaeg-1);
							}
							//
							row++;
							col++;
						}

					}
					
					for(row = 0; row < kantLaeg; row++){
						for(col = 0; col < kantLaeg; col++){
							System.out.printf("%4d", quadAr[row][col]);
//							System.out.printf("\n");
						}
						System.out.printf("\n");
					}
				}
			}catch (InputMismatchException ex) {
				System.out.println("nur zahlen du *****!");
			}
		}
	}
}
 
Hallo,

was eine ArrayIndexOutOfBounds Exception ist, kann man überall nachlesen.

Dann sagt dir der Fehlercode in welcher Zeile es kommt.

Ich schlage vor du gibst vor dieser Stelle aus, welche index Werte du an dem Array abfragst und dann siehst du, dass die zu hoch oder zu niedrig sind.
;(
 
Also das Problem währe gelöst. Aber trotzdem kommt nur mist dabei raus aber danke.

Statt den Fehler für dich rauszupuzzeln gebe ich mal ein paar allgemeine Hinweise:

- Lerne, wie man mit einem Debugger umgeht. Ist wirklich nicht schwierig und hilft ungemein
- Die main-Funktion ist viel zu lang. Zerlege das Programm in kleinere Funktionen. Tu das, bevor du irgend etwas anderes versuchst
- Schreibe die Funktionen so, dass du sie einzeln gut testen kannst. Eine Funktion sollte nur eine einzige Aufgabe erledigen (schon "Wert berechnen und ausgeben" sind zwei), siehe "Single Responsibility Principle"
- Das wäre auch eine gute Gelegenheit, JUnit als Test-Framework kennenzulernen (insbesondere, wenn das von deiner IDE schon unterstützt wird)
- Einige Namen könnten besser sein (wobei ich schon viel schlimmeres gesehen habe). Keine Angst vor etwas längeren Namen, Hauptsache, sie beschreiben den Zweck. mw ist übrigens ein furchtbarer Name für eine Klasse.
- Vermische die Abstraktionsebenen nicht. Eine Funktion, die z.B. die Werte-Eingabe einer anderen Funktion überlässt, ist damit auf einer höheren Abstraktionsstufe, und sollte dann auch die Berechnung oder Ausgabe nicht selbst ausführen, sondern das dann auch delegieren.
- Falls du schon Objektorientierung hattest: Schaue, ob sie hier Vorteile bringen würde (bei kleinen Puzzle-Problemen ist das nicht immer der Fall, bei "echten" Anwendungen fast immer)
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben