ArrayIndexOutOfBoundsException

akvarel

Mitglied
Hallo!
Ich muss so was schreiben:
Entwerfen und analysieren Sie Methoden
groesserGleich(int k) zur Bestimmung der Anzahl der Eintrage  A[j] mit
A[j]>=  k
Ich habe es nicht als Methide gemacht, sondern einfach in der main.
Er sagt mit aber den Fehler ArrayIndexOutOfBoundsException. Ich verstehe nicht warum. Ich überschneite doch die Grenze des Arrays nicht.

Vielen Dank

Java:
public class TC {
	 public static void main(String[] args) {
		 
		 int x[][] = {{4,6,7,8}, {0,1,5,9}, {2,9,10,12}, {0,1,14,14}};
		 
		
		 int i=x.length/2;
		 int u=x.length/2;
		 
	int z=0;
	int k=5;
	
	for(int y=0;y<x.length;y++){
		if(x[y][i]<k){
			for(i+=1;i<x.length;i++){
				if(x[y][i]>=k){
					z++;
				}
				
			}			
		}
		else if(x[y][i]>=k){
			while(u<x.length){
				z++;
				u++;}
			for(i-=i;i>0;i--){
				if(x[y][i]>=k){
					z++;
				}
			
			}
		}
		
		
	}
	
	 System.out.println(z);}}
 

hdi

Top Contributor
Genaue Fehlermeldung posten. Da steht die Zeile dabei in der das auftritt.

Ich überschneite doch die Grenze des Arrays nicht.
Offensichtlich doch. Die JVM lügt nicht ;)

Ich habe es nicht als Methide gemacht, sondern einfach in der main.
Warum?

...Was sollst du machen? Herausfinden wieviele Einträge im Array >= k sind? Oder versteh ich die Aufgabenstellung nicht. Denn wenn das so ist, dann machst du es eindeutig viel zu kompliziert. Das sind 3 Zeilen Code.
 
Zuletzt bearbeitet:
G

Gast2

Gast
Du willst rausfinden wieviele Einträge >= k sind aber nicht jeden Eintrag mit k vergleichen? Wie soll das denn funktionieren? ;)
 
V

vanny

Gast
Wenn du herausfinden willst, welche Einträge >= k sind, dann musst du sie mit k vergleichen^^.
Und das geht nun mal "linear" am schnellsten und am saubersten.
Einfach durch das Array iterieren und nen Treffercounter hochzählen.
Ergebnis ausgeben und fertsch.

Gruß Vanny

Wenn man vom 2. in den 4. Stock will, kann man mit dem Fahrstuhl fahren.
Man kann aber auch warten bis der Fahrstuhl im 1. Stock hält, die Türen zum Schacht aufbrechen und versuchen, am Seil nach oben zu klettern in der Hoffnung, nicht vorher vom hochfahrenden Fahrstuhl gekillt zu werden :oops:

Sry cnr
 
Zuletzt bearbeitet von einem Moderator:

hdi

Top Contributor
Dass das Array sortiert vorliegt hättest du uns sagen müssen. Ja, man könnte sich das an dem Beispiel-Array in deinem Code denken, aber davon steht nix in der Aufgabenstellung.

edit: Wie gesagt, mach mal etwas genauere Angaben zum Fehler. ZEILE! Ist doch unnötig dass wir uns den ganzen Code da durchüberlegen müssen, nur weil du uns (noch) eine Information enthälst.
 

akvarel

Mitglied
Wenn man vom 2. in den 4. Stock will, kann man mit dem Fahrstuhl fahren.
man kann auch im 3. stock anhalten und warten bis die türen zugehen und dann in den 4. stock fahren. und das ist linear.

oder ich kann direkt vom 2. in den 4. stock fahren, ohne anzuhalten. das ist schon nciht linear
 
G

Gast2

Gast
Fang doch erstmal an und setz dir Sysouts rein (oder debuggen) und schau warum welche Variable zu groß wird. Oder suchst du jetzt ne fertige Lösung?

Ich würde den Code aber zunächst mal etwas strukturieren. Du kannst zumindest eine Methode schreiben die dir aus nem sortierten int[] Array die Anzahl der Werte >= k zurückgibt. Die kannst du dann für jedes int[] in deinem int[][] aufrufen.
 

hdi

Top Contributor
Kommt deswegen zu Stande weil du in der inneren for-Schleife an diesem i rumschraubst:

Code:
for(i+=1;i<x.length;i++)

Das i+=1 ist das Problem. Das ist ein Seiteneffekt der IMMER ausgeführt wird. Da hilft dir das i<x.length dahinter auch nix mehr. Zwar wird die innere Schleife nicht betreten aber auch die äußere nutzt das i. Und das ist schon von Anfang an 2, und du zählst es 4 mal hoch. Wäre also 6, aber davor kracht's schon weil keines der inneren Arrays hat length = 7.

Ich glaub übrigens dass du da ein paar Denkfehler drin hast. Warum initialisiert du i mit x.length/2? i nutzt du für den Zugriff am zweiten Index, d.h. auf die einzelnen Arrays. Und wie groß die einzelnen Arrays sind das lässt sich nicht über x.length sagen. Es sei denn es gelten noch weitere totgeschweigte Eigenschaften für das Array..
 
Zuletzt bearbeitet:

akvarel

Mitglied
Das i+=1 ist das Problem. Das ist ein Seiteneffekt der IMMER ausgeführt wird.
Ok. ich konnte es in sowas umwandeln
Java:
for(i=(x.length/2)+1;i<x.length;i++){
aber zeigt mir denselben fehler

i nutzt du für den Zugriff am zweiten Index, d.h. auf die einzelnen Arrays. Und wie groß die einzelnen Arrays sind das lässt sich nicht über x.length sagen
ich habe eine quadratische Matrix. also ich kann durch x.length auch die länge einzelnen arrays bestimmen.(entschuldigung, das habe ich auch nicht gesagt)
 

hdi

Top Contributor
Es ist nicht so dolle die Zählvariable einer Schleife innerhalb einer anderen Schleife zu verändern. Das führt zu einer schwer nachvollziehbaren Schleifenlogik. Mach dir für die innere Schleife eine neue Variable, die kannst du ja mit i oder i+1 oder was auch immer initialisieren. Aber verändere nicht i selbst.

Was ist eigentlich dein Gedankengang? Kannst du deinen Code mal umgangssprachlich ausformulieren? Wir müssen erstmal rausfinden ob du einen Fehler im Ansatz hast oder einen Fehler in der Umsetzung.
 

akvarel

Mitglied
ok. also.
für ein einzelnes array vergleiche ich k mit dem element, der in der mitte steht.

wenn k grösser ist, dann mitte+1 und ich such nach der bedienung eintrag>=k, wenn ich den gefunden habe dann z=z+1(z ist die Anzahl der elementen,dir grösser gleich k sind), und das wird bis zum ende des arrays gemacht.
Java:
if(x[y][i]<k){
			for(i=(x.length/2)+1;i<x.length;i++){
				if(x[y][i]>=k){
					z++;
				}
				
			}
wenn aber k kleiner oder gleich als eintrag in der mitte ist, dann zähle ich zuerst z hoch für jeden eintrag bis zum ende des arrays(weil da auf jeden fall grössere einträge stehen).
Java:
else if(x[y][i]>=k){
			while(u<x.length){
				z++;
				u++;}
und dann muss ich noch rausfinden, wie viele einträge vor der mitte grösser gleich k sind. also, ich zähle mitte-1, und wenn die Bedienung erfüllt ist,dann wieder z++, und so bis zum arraysende.

Java:
for(i=(x.length/2)-1;i>0;i--){
				if(x[y][i]>=k){
					z++;
				}
 
G

Gast2

Gast
Das ist aber auch keine richtige binäre Suche ;)
Du schaust ja nur ganz am Anfang einmal in der Mitte nach ob du dich nach links oder rechts orientieren musst. Dann kannst du das ganze auch direkt linear durchgehen, viel langsamer wirds dann auch nicht sein ;)

Du musst übrigens auch nicht jeden Eintrag zählen, es reicht wenn du die Stelle i gefunden hast wo gilt x < k und x[i+1] >= k. Wenn du die Stelle gefunden hast kannst du direkt sagen wieviele Einträge in deinem Array >= k sind. Da das Array sortiert ist muss jeder Eintrag rechts von x[i+1] auch immer >= k sein.

Konzentrier dich also erstmal darauf die Stelle i zu finden. Das kannst du ganz gut mit binärer Suche machen.
 

stone71

Mitglied
Die Variable i wird global gesetzt und irgendwann 4, dadurch knallt die Abfrage if(x[y]>=k)...
Sitze an der Arbeit und weiß somit nicht genau, was an dem Rest zu ändern wäre, aber ich denke, Du musst die Variable an einer Stelle zurücksetzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
Kumora ArrayIndexOutOfBoundsException bei einem Sortierverfahren Java Basics - Anfänger-Themen 2
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
F ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
Hanschyo ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
M ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
R Compiler-Fehler ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
L ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 10
J Zwei Arrays zippen wirft eine ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 11
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
V ArrayIndexOutofBoundsException:0 Java Basics - Anfänger-Themen 0
R ArrayIndexOutofBoundsException: 10 Java Basics - Anfänger-Themen 5
P ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
T ArrayIndexOutOfBoundsException -> Fehler in for-Schleife? Java Basics - Anfänger-Themen 6
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S noch ein ArrayIndexOutOfBoundsException Fehler Java Basics - Anfänger-Themen 2
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
O ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
J "ArrayIndexOutOfBoundsException", finde den Fehler schlicht nicht Java Basics - Anfänger-Themen 6
T ArrayIndexOutOfBoundsException - Problem mit Array-Größe Java Basics - Anfänger-Themen 4
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
A parseDouble - ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
A ArrayIndexOutOfBoundsException - woher kommt er?! Java Basics - Anfänger-Themen 4
J AWT-EventQueue: ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 6
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
K ArrayIndexOutOfBoundsException: 0 Java Basics - Anfänger-Themen 4
Luk10 ArrayIndexOutOfBoundsException .... Java Basics - Anfänger-Themen 2
X Probleme mit ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
B Fehlermeldung: "ArrayIndexOutOfBoundsException"??? Java Basics - Anfänger-Themen 3
H java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 Java Basics - Anfänger-Themen 5
N ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 7
U ArrayIndexOutOfBoundsException - dringend Hilfe gesucht Java Basics - Anfänger-Themen 8
S java.lang.ArrayIndexOutOfBoundsException: 5 nur wieso? Java Basics - Anfänger-Themen 2
T ArrayIndexOutOfBoundsException ? Matrizenrechnung. Java Basics - Anfänger-Themen 3
B ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
T ArrayIndexOutOfBoundsException finde den Auslöser nicht Java Basics - Anfänger-Themen 5
G ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 11
V java.lang.ArrayIndexOutOfBoundsException: Java Basics - Anfänger-Themen 3
E 2 Prob.:"ArrayIndexOutOfBoundsException" & do- Java Basics - Anfänger-Themen 2
Z Warum habe ich eine ArrayIndexOutOfBoundsException? Java Basics - Anfänger-Themen 2
N ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
S ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
N ArrayIndexOutOfBoundsException...... Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben