ArrayIndexOutOfBoundsExeption

Status
Nicht offen für weitere Antworten.

Sindbad1983

Top Contributor
Hi!
Es soll ein int-Array eingelesen werden!
Dazu soll die gewünschte Größe des Array und dann die Zahlen des Array über die Konsole eingelesen werden:

ich hab das so probiert:

Code:
import java.io.*;

class TestArray{
	
	int num;
	int size;
	int [] numbers;
	
	public TestArray(int size,int [] zahlen){  //Konstruktor

		numbers=new int [size];
		
		for(int i=0;i<numbers.length;i++){
			for(int j=0;j<zahlen.length;i++){
				numbers [i]=zahlen[j];  //Fehler hier vielleicht?
			}
		}
	}
	
	public String toString(){
		StringBuffer sb=new StringBuffer();
	
		for(int i=0;i<numbers.length;i++){
			sb.append(numbers[i]);	
		}
		String s=sb.toString();
		return s;
	}

	public static void main(String [] args){
		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		
		try{
		
		System.out.println("Geben Sie die Länge des Array ein:");
		String s=br.readLine();
		int size=Integer.parseInt(s); //Länge in int-Zahl umgewandelt
	
		System.out.println("Geben Sie nun die Zahlen des Arrays ein:");
                                //hier werden die Zahlen von der Konsole eingelesen und im Array Zahlen gespeichert
		int [] zahlen=new int [size];
		for(int i=0;i<zahlen.length;i++){   
			zahlen[i]=Integer.parseInt(br.readLine());	
		}
		
		TestArray test=new TestArray(size,zahlen);	//Länge und Zahlen für Array werden übergeben!
		System.out.println(test);
		}
		catch(IOException e){};
	}
}

Jetzt hab ich eine ArrayIndexOutOfB.. E. und weiß aber nicht, wo der Fehler liegen könnte!
Weiß jemand vielleicht die Antwort?
 
G

Guest

Gast
for(int i=0;i<numbers.length;i++){
for(int j=0;j<zahlen.length;i++){

:bae:
 

Sindbad1983

Top Contributor
hast Recht...danke!

Aber jetzt seh ich grad, dass die Ausgabe voll falsch ist! :-(

bei Länge 4 und z.B.den Zahlen 1 3 5 7
gibt er dann jeweils die letzte Zahl also

7 4x aus:

-> 7777 :-((

naja..mal schaun
 

Wildcard

Top Contributor
Hi!

Du brauchst die Schleifen überhaupt nicht.
Mach doch einfach

Code:
   public TestArray(int [] zahlen)
   {  //Konstruktor 

      numbers=zahlen; 
       
      
   }
 

Sindbad1983

Top Contributor
geil..es geht!
Danke!

Aber wieso geht das so einfach auch?
hm..denk ich wahrscheinlich immer ein bissl zu kompliziert..
 

Sindbad1983

Top Contributor
so..jetzt möcht ich das Array sortieren:

Code:
	public int [] isSorted(int [] zahlen, boolean ascending){
		
		if(ascending){
			for(int j=0;j<zahlen.length;j++){
			for(int i=0;i<zahlen.length;i++){
				if(zahlen[i]>zahlen[i++]){
					int tmp=zahlen[i++];
					zahlen[i++]=zahlen[i];
					zahlen[i]=tmp;
				}
			}
			}
		}
		return zahlen;
	}

Code:
................
                                TestArray test=new TestArray(size,zahlen);	
		
		
		test.isSorted(zahlen,true);
		System.out.println(test);

................

ich find den Fehler wiedermal nicht
und ich suche..und suche..und suche... :autsch:
 

Wildcard

Top Contributor
für was sind die 2 for schleifen?
Das versteh ich nicht ganz?
:!: Mit zahlen[i++] wird dein i erhöht.
Wenn dann zahlen[i+1].
Das würde hier übrigens auch nicht funktionieren, da deine abbruchbedingung bei
Code:
i<zahlen.length
und i+1 somit irgendwann größer wird als das array.
Hier mal ein ganz einfaches BubbleSort verfahren.
Ist sau schlecht, nur als Hilfe gedacht.

Code:
   private void sortiere(int [] a)
   {   
       for(int i=1;i<a.length;i++)
       {
           if (a[i]>a[i-1])
           {
               tausche(a,i);
               i=0;
           }
       }
   }
   
   private void tausche(int[] a, int i)
   {
       int temp = a[i];
       a[i] = a[i-1];
       a[i-1] = temp;
   }
 

Sindbad1983

Top Contributor
Danke für deine Hilfe!

Aber ich hab jetzt schon selber rausgefunden! :###

Code:
	public int [] isSorted(int [] zahlen, boolean ascending){
		
		if(ascending){
			
			for(int i=0;i<zahlen.length-1;i++){
			
			
				int tmp=zahlen[i];



				if(tmp>zahlen[i+1]){
					zahlen[i]=zahlen[i+1];
					zahlen[i+1]=tmp;
				}
			}
		}
		return zahlen;
	}


so funktionierts!
Danke
 

Sindbad1983

Top Contributor
mensch...so ein blöder Fehler!!!!!

weiß nicht, wie ich da auf i++ komm :bahnhof:

so würd meine alte Version funktionieren:

Code:
	public int [] isSorted(int [] zahlen, boolean ascending){
		
		if(ascending){
			for(int j=0;j<zahlen.length-1;j++){
			for(int i=0;i<zahlen.length-1;i++){
				if(zahlen[i]>zahlen[i+1]){
					int tmp=zahlen[i+1];
					zahlen[i+1]=zahlen[i];
					zahlen[i]=tmp;
				}
			}
			}
		}
		return zahlen;
	}

Dummer Fehler! :bloed:
 
Status
Nicht offen für weitere Antworten.

Oben