Maximum Subarray Problem; Problem mit der Rückgabe

D.J.

Mitglied
Hallo alle zusammen,
bin ein ziemlich blutiger Java-Neuling und habe ein Problem mit oben stehendem Programm.
Hier erstmal mein Quellcode:
Java:
public class MaxSubProb{
	public static int[] MaxSubProb(int [] a){
		int MaxSumme = -9999999;							//MaxSumme := -unendlich
		for(int left = 0; left <= a.length; left++){
			for(int right = left; right <= a.length; right++){
				int Summe = 0;
				for(int i = left; i < right; i++){
					Summe = Summe + a[i];
				}
				
				if(Summe > MaxSumme){						
					MaxSumme = Summe;					
					int mleft = left;					
					int mright = right;
					int [] rückgabe = {MaxSumme, mleft, mright -1};		
					System.out.println(mleft + ", " + mright);
					return rückgabe;
				}
			}
		}
		
		
		//int [] leer = {};								//liefert nur Nullen zurück
		//int [] rückgabe = {MaxSumme, mleft, mright -1};				//kennt mleft & mright hier nicht
		//return MaxSumme;								//Rückgabe von mleft & mright fehlen
		//return null;									//liefert ebenfalls nur Nullen
												
	}

	public static void print(int []rückgabe /*int MaxSumme*/, int []a){
		System.out.println("Berechnung zu nachstehender Folge:");
		for(int i = 0; i < a.length; i++){
			System.out.print(a[i] + ", ");
		}
		System.out.println();
		System.out.println("Die maximale Teilsumme ist: " + rückgabe[0]); 			// ...+ rückgabe[0]
		
		System.out.println();
	}


	public static void main(String[] args){
		int [] c;
		c = new int [10];
		for(int i = 0; i < 10; i++){
			c[i] = Integer.parseInt(args[i]);
		}
		int [] b = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};
		print(MaxSubProb(b), b);
		print(MaxSubProb(c), c);
		
	
	}
}

Mein Problem liegt nun direkt in der Rückgabe der ersten Methode, "MaxSubProb". Ich möchte hier nämlich nicht nur den Maximalwert eines Teilarrays zurückgeben, sonderen auch den Anfangs- und Endindex.
Da aber natürlich nur eine Rückgabe möglich ist hab ich mir überlegt die drei Werte die ich haben möchte in ein neues Array zu schreiben und diesen dann zurückzugeben.
Nun ist also meine Frage wie ich diese drei Werte aus meinen if-Klammern herausbekomme.
Versuche ich einfach am Ende der Methode besagtes neues Array zurückzugeben sagt er mir, daß er die beiden Variablen "mleft" und "mright" nicht kennt.
Schreibe ich mein "return" direkt in die if-Klammern sagt er mir: missing return statement.
Und wenn ich am Ende der Methode eine weitere Rückgabe hinzufüge überschreibt er mir einfach alles, was ich vorher hätte zurückgeben wollen.
Wie kann ich denn anders an die drei Variablen "mleft", "mright" und "MaxSumme" herankommen, um sie später für meine main und print methode zu benützen?
Hoffe mir kann jemand helfen, denn ich bin langsam am verzweifeln.

MfG D.J.
 

Antoras

Top Contributor
Eine Variable ist immer in dem Block sichtbar, in dem sie definiert wurde. Des weiteren gilt, dass sie in allen Unterblöcken des Blocks in dem sie definiert wurde sichtbar ist.
Java:
public void methode() {
  int i;
  if (i < 5) {
    int m = i; // möglich
    i = 5;  // auch möglich
  }
  i = m; // nicht möglich, m nicht mehr sichtbar
}
Also musst du die Werte, die du zurückgeben möchtest in eine Variable schreiben, die in der kompletten Methode sichtbar ist.
 

Wortraum

Bekanntes Mitglied
@D.J.:
> Da aber natürlich nur eine Rückgabe möglich ist …
Ist das natürlich? Es ist jedenfalls eine Eigenheit Javas.

> … hab ich mir überlegt die drei Werte die ich haben möchte
> in ein neues Array zu schreiben und diesen dann zurückzugeben.
Dabei ist leider nicht selbsterklärend, unter welchem Indize sich welcher Wert versteckt. Gewiß kann man das machen, aber auch eine eigene Klasse für die drei Rückgabewerte ist denkbar und für mehrere Rückgabewerte eine übersichtliche Sache.

> Wie kann ich denn anders an die drei Variablen "mleft", "mright"
> und "MaxSumme" herankommen, um sie später für meine main
> und print methode zu benützen?
Indem Du die Sichtbarkeit von Variablen berücksichtigst.

> Schreibe ich mein "return" direkt in die if-Klammern sagt
> er mir: missing return statement.
Eine Methode kann nicht mal etwas zurückgeben, mal aber auch nicht. Sie muß immer etwas zurückgeben, also auch für den Fall Summe <= MaxSumme.

Variablenbezeichner beginnen übrigens mit einem Kleinbuchstaben. Und MaxSumme wird nie geändert und dann verändert, da ist irgend etwas falsch.
 
Zuletzt bearbeitet:

D.J.

Mitglied
Danke erstmal für die Antworten.
Dass meine Variablen außerhalb meines if-Blockes nicht mehr Sichtbar sind leuchtet mir ein und ich habe mir sowas in der Art schon gedacht.
Wenn ich nun aber die Sichtbarkeit der Variablen beachte und meine Rückgabe direkt in einen if-Block schreibe heißt das ich brauche am Ende meinr Methode nochmal eine Rückgabe, da mein if-Block nicht immer durchlaufen wird.
Und gerade dabei liegt das Problem.
Am Ende wird er nämlich auf jeden Fall nicht mehr durchlaufen und meine zweite Rückgabe überschreibt die eigentlich gewollte Rückgabe.
Gibt es denn eine Möglichkeit, dass mein zweites "Return" das erste nicht überschreibt?
Oder kann ich meine Variablen irgendwie wie eine Methode mit "public" deklarieren um auch von außerhalb meines Blockes drauf zugreifen zu können?
Möchte das ganze gern in einer Klasse stehen haben, denn weitere Klassen zu schreiben haben wir in der Vorlesung noch nicht durchgenommen. Aber sobald ich fertig bin werde ich das Ganze zwecks Übersichtlichkeit sowieso noch mit Kommentaren versehen.
 

Antoras

Top Contributor
Du sollst die Variable ja nicht innerhalb deines if-Blocks deklarieren, sondern in deiner Methode, also außerhalb des if-Blocks (so wie in meines Beispiel die Variable i). Dann kannst du sie am Ende der Methode zurückgeben und brauchst dies nicht mehr im if-Block machen.
 

Wortraum

Bekanntes Mitglied
Return überschreibt nichts; nach return ist die Methode beendet.

> Am Ende wird er nämlich auf jeden Fall nicht mehr durchlaufen
Entweder wird es genau einmal durchlaufen oder überhaupt nicht.
 

D.J.

Mitglied
Java:
public class MaxSubProb{
	public static int[] MaxSubProb(int [] a){
		int MaxSumme = -9999999;						//MaxSumme := -unendlich
		int mleft = 0; int mright = 0;
		int [] rückgabe = {MaxSumme, mleft, mright};
		for(int left = 0; left <= a.length; left++){
			for(int right = left; right <= a.length; right++){
				int Summe = 0;
				for(int i = left; i < right; i++){
					Summe = Summe + a[i];
				}
				
				if(Summe > MaxSumme){						
					rückgabe[0] = Summe;					
					rückgabe[1] = left;					
					rückgabe[2] = right;
					//System.out.println(left + ", " + right);
				}
			}
		}
		
		
		//int [] leer = {};								//liefert nur Nullen zurück
		return rückgabe;								//kennt mleft & mright hier nicht
		//return MaxSumme;								//Rückgabe von mleft & mright fehlen
		//return null;									//liefert ebenfalls nur Nullen
												
	}

	public static void print(int []rückgabe /*int MaxSumme*/, int []a){
		System.out.println("Berechnung zu nachstehender Folge:");
		for(int i = 0; i < a.length; i++){
			System.out.print(a[i] + ", ");
		}
		System.out.println();
		System.out.println("Die maximale Teilsumme ist: " + rückgabe[0]); 			// ...+ rückgabe[0]
		System.out.println("Anfangsindex: " + rückgabe[1]);
		System.out.println("Endindex: " + rückgabe[2]);
		System.out.println();
	}


	public static void main(String[] args){
		int [] c;
		c = new int [10];
		for(int i = 0; i < 10; i++){
			c[i] = Integer.parseInt(args[i]);
		}
		int [] b = {31, -41, 59, 26, -53, 58, 97, -93, -23, 84};
		print(MaxSubProb(b), b);
		print(MaxSubProb(c), c);
		
	
	}
}

Habe jetzt die Variablen vor meinen Schleifen bereits initialisiert und eigentlich müsste er mir doch in dem if-Block jetzt die einzelnen Werte für dieses Array ändern.
Aber komischweise änderts mir jetzt die Werte für jeden Schleifendurchlauf...
Was habe ich da falsch gemacht?
 
J

JohannisderKaeufer

Gast
Java:
		int MaxSumme = -9999999;						//MaxSumme := -unendlich
Schreibt man normalerweise so:
Java:
		int maxSumme = Integer.MIN_VALUE;						//MaxSumme := -unendlich, while(!KONSTANTE) variablen klein und camelCase schreiben
 

D.J.

Mitglied
@Johannisderkaeufer
Danke, werde ich mir merken. Habe ich noch nicht gekannt.
Habe das Problem jetzt übrigens mit einem anderen Algorithmus gelöst.
Danke allen für eure Antworten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Minimum und Maximum ausgeben lassen Java Basics - Anfänger-Themen 7
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
RudiRüssel Binäre Suche, unsortiert, lokales Maximum Java Basics - Anfänger-Themen 15
J Maximum herauskriegen mit foreach Java Basics - Anfänger-Themen 6
S Compiler-Fehler im array Maximum ermitteln Java Basics - Anfänger-Themen 6
M Maximum einer sinusfunktion (Spalt-Experiment) Java Basics - Anfänger-Themen 5
hello_autumn Maximum berechnen. Java Basics - Anfänger-Themen 17
K Maximum Suchen Array Java Basics - Anfänger-Themen 6
R Erste Schritte Minimum und Maximum in Array finden Java Basics - Anfänger-Themen 29
D VM Argumente - Das Maximum rausholen Java Basics - Anfänger-Themen 19
V Maximum berechnen ... Java Basics - Anfänger-Themen 20
S JSplitPane Divider Maximum Position Java Basics - Anfänger-Themen 5
J Das Maximum einer Liste ermitteln Java Basics - Anfänger-Themen 8
S JAVA Methode für Maximum aus 4 ganzen Zahlen Java Basics - Anfänger-Themen 12
A Felder- Minimum/Maximum Java Basics - Anfänger-Themen 2
T aus Integer Array Maximum bestimmen Java Basics - Anfänger-Themen 7
M Maximum, Minimum und Mittelwert berechnen Java Basics - Anfänger-Themen 25
R maximum in integer array suchen Java Basics - Anfänger-Themen 29
B Applet, welches Maximum eines Array bestimmt Java Basics - Anfänger-Themen 2
P Lokales Minimum- Maximum, Globales Minimum - Maximum ? Java Basics - Anfänger-Themen 4
P Minimum/Maximum aus einer Liste Java Basics - Anfänger-Themen 3
Z Zahlenreihe maximum Java Basics - Anfänger-Themen 3
U Maximum zweier Zahlen ermitteln Java Basics - Anfänger-Themen 7
D Maximum werte eines Arrays bestimmen !!!??? Java Basics - Anfänger-Themen 13
S maximum zweier Zahlen Java Basics - Anfänger-Themen 1
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben