2016-05-26 5 views
1

Um Dinge anzufangen, mache ich ein Spiel. Du kämpfst auf einem 3x3 Grid (mit einem 2-dimensionalen Array), und wenn die "Lane #" (Lane # = Row + Col) vor dir leer ist, bekommst du eine -15% Damage Reduction, und diese stapelt für jeden leere Spur.Wie geben Sie eine Null zurück, wenn sich im Raster, wo Sie überprüft haben, nichts befindet?

Das heißt, wenn du auf [0] [0] bist, dann bist du in Lane # 0, und daher kann niemand vor dir haben, und du wirst immer 100% Schaden nehmen (das ist natürlich ohne Verteidigung und Yadda Yadda sonst das ändert)

Und wenn Sie auf [2] [2] sind, dann sind Sie in Spur # 4, und wenn jede Spur vor Ihnen mindestens ein Leerzeichen in sich genommen hat, dann werden Sie nehmen 15 * 4 = 60, 100-60 = 40% des tatsächlichen Schadens.

Jetzt ist das aus dem Weg. Ich habe Schwierigkeiten beim Zurück 0 ... Ich halte einen Fehler bekommen, die besagt, dass Sie keinen Void Wert zurückgeben kann ...

‚kann keinen Wert von Verfahren, dessen Ergebnistyp ist void zurückgeben‘

public Blanks(int l) { //l = Lane 
    int x = 0; //The Return 
    for (int i = 0; i < 6; i++) //The loop 
     if (l=0){ //Here I keep getting an error saying 'incompatible types' 
      x = 0; 
      return x; //Here is the 'cannot return a void value' error 
      break; 
     } 
     if (l>=1){ 
      x++; 
     } 
     if (l>=2){ 
      x++; 
     } 
     if (l>=3){ 
      x++; 
     } 
     if (l>=4){ 
      x++; 
     } 
     return x; //for some odd reason, this is also a void value 
    } 
} 

Ich habe immer noch die Überprüfung der Array/Grid-Teil hinzufügen, wie ich über diese auch ratlos bin .. aber ein anderes Problem, eine andere Frage .. das eigentliche Array selbst.

+0

Verwendung doppelte Gleichheitszeichen für die Gleichstellung überprüfen '==' . Das einzige Gleichheitszeichen '=' ist für die Zuweisung. Außerdem hat Ihre Klasse "Blanks" keinen Rückgabetyp. Sie können also nichts zurückgeben. Ändern Sie es in 'public int Blanks (int l)' notieren Sie dort das eingefügte 'int'-Schlüsselwort. – Ian

+0

Danke! Das war eine sehr schnelle Antwort! – DarixGoof

+0

Ah ja, es ist wahrscheinlich besser, es * comment * zu nennen, das die Frage beantwortet - oder * eine antwortende Frage (?) * ... – Ian

Antwort

0

Um einen ganzzahligen Wert zurückgeben Sie muss einen Rückgabetyp in der Methode erwähnen. Außerdem haben Sie in der ersten if-Anweisung den Zuweisungsoperator anstelle des Vergleichs verwendet.

Auch warum Sie Pause nach der Rückkehr verwendet haben. Ich denke, du musst die erste Pause machen und dann am Ende zurückkehren.

Eine weitere Sache hinzuzufügen. Ihre for-Schleife sollte geschweifte Klammern enthalten. Nur die erste if-Anweisung wird gemäß Ihrem Code ausgeführt.

public int Blanks(int l) { //l = Lane 
    int x = 0; //The Return 
    for (int i = 0; i < 6; i++) //The loop 
     if (l==0){ //Here I keep getting an error saying 'incompatible types' 
      x = 0; 
      break; 
     } 
     if (l>=1){ 
      x++; 
     } 
     if (l>=2){ 
      x++; 
     } 
     if (l>=3){ 
      x++; 
     } 
     if (l>=4){ 
      x++; 
     } 
     return x; //for some odd reason, this is also a void value 
    } 
} 

Ich bin nicht in Ihre Logik getreten. Kommentar, wenn Sie danach ein Problem haben.

+0

Okay .. Ich habe auch deine Fehlerkorrekturen versucht ... aber dann habe ich etwas bemerkt. Wenn ich meine Schleife 'i <6' mache, heißt das, dass das Array 6 mal überprüft wird? oder es geht durch die 6 Schritte? – DarixGoof

0

sollten Sie die Methode Header public int Blanks(int l) {
ändern und Sie sollten break; Schlüsselwort entfernen, weil Sie die Methode Wert, bevor sie zurückkehren und werden unerreichte Anweisung sein.

0

Ich verstehe nicht, warum Sie die hier für die Schleife verwenden, aber dies ist ein Weg, es zu tun:

public int Blanks(int l) { 
    int x = 0; 
    for (int i = 0; i < 6; i++) 
     if (l==0){ 
      x = 0; 
     }else { 
      x++; 
     } 
    return x; 
} 

Aber für den Fall, dass l==0 Ihre Methode 5 zurückkehren;

Wenn Sie zurückkehren 0 oder 1 dann müssen Sie die Schleife entfernen

public int Blanks(int l) { 
    if (l==0) return 0; 
    else return 1; 
} 

und das Verfahren mit true-false:

public boolean Blanks(int l) { 
    if (l==0) return false; 
    else return true; 
} 
+0

Ich denke, ich verwende hier eine Schleife falsch ... sorry dafür. Noch neu in der Programmierung und all das. Ich weiß, dass meine Methode sehr grob ist. Es ist praktisch brutal ... also meine nächste Frage .. nicht sicher, ob ich das kann .. aber ... gibt es eine viel taktvollere Art, etwas zu programmieren, das 1-4 prüft um zu sehen, ob es wahr oder falsch ist? – DarixGoof

+0

@DarixGoof können Sie expliziter sein? Wann wird es wahr und wann falsch sein? Und was genau musst du zurückgeben? – Andrew

+0

im Grunde ist mir eine 3x3-Array zu nehmen und wenn ein "Lane" um zu sehen, die Überprüfung entweder in, es hat etwas oder nicht eine Spur ist Row # + Col # ... So [2] [2] Lane 4 , [2] [1]. [1] [2] ist Spur 3, [2] [0]. [1] [1]. [0] [2] ist Spur 2, [1] [0]. [0] [1] ist Lane 1 und [0] [0] ist Lane 0 Wenn in einer der Koordinaten für ihre jeweilige Lane etwas ist, dann falsche Bedeutung Fügen Sie nicht 1 zum Return hinzu. Wenn sich in keiner der Koordinaten für ihre jeweilige Lane befindet, dann die wahre Bedeutung Add 1 to Return. Dies ist nur ein Prüfsystem für einen anderen Code – DarixGoof

Verwandte Themen