Entwickler-Ecke
Basistechnologien - bool Methode - Not all code paths return a value
hauptmann25 - Mo 04.04.11 18:52
Titel: bool Methode - Not all code paths return a value
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private static bool FindFour(ref bool playerA,ref bool playerB, int[,] field) { for (int rows = 0; rows < field.GetLength(0); rows++) { int sumR = 0; for (int col = 0; col < field.GetLength(1); col++) { sumR += field[rows, col]; if (sumR == 4) playerA = true; else if (sumR == -4) playerB = true; } } if (playerA == true) return playerA; if (playerB == true) return playerB; |
Ich hab gerade ne Hausübung in der ich ein Spiel 4 gewinnt programmiere.
Allerdings habe ich ein Problem mit der Methode da es mich zwingen will auch das sumR zu returnen weil ich es in einer if verwendet habe.
Hat wer eine Ahnung was ich machen soll damit ich nur den Bool returnen kann ohne dass mich das SumR stört?
Bitte nicht zu arg schimpfen über den Schrott den ich da zusammenprogrammiert habe bin ja noch in der 1.HTL :nixweiss:
Th69 - Mo 04.04.11 19:16
Hi,
überleg mal, was passiert wenn sowohl PlayerA als auch PlayerB false sind (was soll dann als Wert zurückgegeben werden?).
Und wenn es dann läuft, wirst du merken, daß deine Berechnung noch fehlerhaft ist (du mußt ja 4 benachbarte Felder suchen)...
hauptmann25 - Mo 04.04.11 19:31
Th69 Danke für die Schnelle Antwort.
Also Punkt 1 hast Recht ich weis nur nciht wie ich beides zurückgeben kann z.B so:
playerA,playerB = FindFour(ref playerA,ref playerB,field);
und in der Methode:
return playerA,playerB;
nur geht das leider nicht und einzeln funktioniert es auch nicht da es bei return sofort aus der Methode aussteigt.
Punkt 2 :
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| private static bool FindFour(ref bool playerA,ref bool playerB, int[,] field) { for (int rows = 0; rows < field.GetLength(0); rows++) { int sumR = 0; for (int col = 0; col < field.GetLength(1)|| col < col+4; col++) { sumR += field[rows, col]; if (sumR == 4) playerA = true; else if (sumR == -4) playerB = true; } } |
So müsste jetzt passen da leere Felder mit 0 ,PlayerA mit -1 und PlayerB mit 1 intialisiert ist.
Th69 - Mo 04.04.11 19:59
Hi,
was genau willst du denn zurückgeben? Bisher gibt du mit 'bool' ja nur entweder 'true' oder 'false' zurück (durch die Angabe 'ref' bei den ersten beiden Parametern gibst du aber auch schon diese Werte zurück an die aufgerufenen Variablen).
Schau jetzt ersteinmal, daß dein Programm kompiliert (zur Not also einfach ein 'return false' an das Ende der Methode) und dann kannst du ja Step-By-Step die weiteren Fehler per Debugging finden.
Hinweis: auch die Änderung 'col < col+4' ist nicht korrekt, denn dieser Ausdruck ist ja (in diesem Kontext) immer wahr.
hauptmann25 - Mo 04.04.11 20:10
oh ja danke für den Hinweis habe da ein && hinmachen wollen
Ich habe das so gemacht das das spiel läuft solange PlayerA und PlayerB = false sind. Werden 4 gefunden ist eins true und das spiel ist vorbei. Kann ich jetzt nicht die ganze Variable zurückgeben? Denn ich muss nach jeden Spielzug überprüfen.
So hier mal die vollständige Methode noch ziemlich fehlerhaft mit allen Prüfvorgängen:
*edit: Wider mal ein paar Kleine Fehler ausgebügelt... Ich mach eindeutig zu viel davon O.o
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| private static bool FindFour(ref bool playerA,ref bool playerB, int[,] field) { for (int rows = 0; rows < field.GetLength(0); rows++) { int sum = 0; for (int col = 0; col < field.GetLength(1)&& col < col+4; col++) { sum += field[rows, col]; if (sum == 4) playerA = true;
else if (sum == -4) playerB = true; } }
for (int col = 0; col < field.GetLength(1); col++) { int sum = 0; for (int rows = 0; rows < field.GetLength(0)&& rows < rows+4; rows++) { sum += field[col,rows]; if (sum == 4) playerA = true; else if (sum == -4) playerB = true; }
}
int sumR = 0; int sumL = 0; for (int rows = field.GetLength(0)-1; rows >= 3; rows--) { for (int col = 0; col < field.GetLength(1)-3; col++) { for (int i = 0; i < 4; i++) { if (rows - i >= 0 && col - i >= 0) sumL += field[rows - i, col - i]; if(rows-i >= 0 && col+i < field.GetLength(1)) sumR += field[rows-i,col+i]; } } }
if (sumR == 4 || sumL == 4) playerA = true; if (sumR == -4 || sumL == -4) playerB = true;
if (playerA == true) return playerA; if (playerB == true) return playerB; } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!