warum ArrayIndex Exception?

Reiner

Mitglied
Hallo Leute!
Ich habe gerade mit Programmieren angefangen. Jetzt hab ich die Aufgabe, ein Programm zu schreiben, das Zahlen von der Kommandozeile ausliest und an eine Methode übergibt, welche diese Zahlen dann summiert.
Vorgabe: die int Methode muss die parameter < (int [ ] a, int von, int bis) > übernehmen. Die Berechnung soll rekursiv erfolgen.
Nun bastel ich hier ewig dran rum und kann auch kompilieren, bekommen nach Eingabe von Werten auf der Kommandozeile immer eine " ArrayIndexOutOfBoundException " in Zeile 17 und 10 Warum???
Vielleicht kann jemand helfen, danke schonmal!

Java:
public class Summe{
	public static void main( String[] args){

		int von;
		int bis = args.length;
		int [] a = new int [bis];
			for(von =0; von < bis; von++)
				a[von] = Integer.parseInt(args[von]);

		System.out.println(rechnung(a, von, bis));
	}
	public static int rechnung(int[] a, int von, int bis) {
		if (von == a.length - 1) 
			return a[von];
		
		else{
			int result = a[von] + rechnung(a, von+1, bis);
			return result;
		}
	}
}
 
Zuletzt bearbeitet:

Reiner

Mitglied
dann ist das Feld a[ ] , "von" sollte bei null anfangen und bis 2 laufen, "bis" ist 3.

Ich glaube ich erahne das Problem, nur fällt mir keine lösung ein. Ich glaube der von-Wert wird nicht so übernommen, wie ich mir das vorstelle.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
2 Tipps:

- for Schleifen sollten private Zähler besitzen:
Java:
for(int i = von; i < bis; i++) {...}
- Rekursionen sollten Basisfälle auch abfangen: Was ist wenn von >= bis ist?
Java:
if (von >= bis) {
  return 0;
}

Der Methodenaufruf sollte dann in etwa so aussehen:
Java:
System.out.println(rechnung(a, 0, a.length));
 

Reiner

Mitglied
Danke schön!!! Die Tipps waren sehr hilfreich. Jetzt läuft es. Hier der fertige Code:

Java:
public class Summe{
	public static void main( String[] args){

		int bis = args.length;
		int [] a = new int [bis];
			for(int i =0; i < bis; i++){
				a[i] = Integer.parseInt(args[i]);
			}
		System.out.println(rechnung(a, 0, a.length));

	}
	public static int rechnung(int[] a, int von, int bis) {
		if (von == a.length - 1) 
			return a[von];
		
		else{
			int result = a[von] + rechnung(a, von+1, bis);
		
		return result;	
		}
	}
}
 

Flown

Administrator
Mitarbeiter
1. Du verwendest deine bis Variable in deiner Methode nicht
2. Was ist wenn dein Array leer ist, was gibt dir deine Methode zurück?
 

Reiner

Mitglied
Ich kann statt a.length ja einfach "bis" nehmen in meiner methode. Was laut aufgabenstellung natürlich sinn macht.
Und wenn das array leer ist, gibts ne exception. Hab ich behoben, wie du weiter oben geschrieben hast. Danke!

Java:
public class Summe{
	public static void main( String[] args){

		int bis = args.length;
		int [] a = new int [bis];
			for(int i =0; i < bis; i++){
				a[i] = Integer.parseInt(args[i]);
			}	
		System.out.println(rechnung(a, 0, a.length));
	}
	public static int rechnung(int[] a, int von, int bis) {
		if (von >= bis)
			return 0;
		
		else{
			int result = a[von] + rechnung(a, von+1, bis);
		
		return result;	
		}
	}
}
 
Zuletzt bearbeitet:

Neue Themen


Oben