2016-05-26 4 views
1

物事を始めるには、私はゲームを作っています。あなたは3次元グリッド(2次元配列を使用)で戦い、あなたの前方の "Lane#"(Lane#= Row + Col)が空白の場合、-15%のダメージリダクションが得られます。ブランクレーン。チェックしたグリッドに何もない場合は、どのようにゼロを返しますか?

これは、あなたが[0] [0]の場合、レーン#0にあるため、おそらく誰よりも先にいることはできず、常に100%ダメージを取ることを意味しますあなたが[2] [2]にいるなら、あなたはレーン#4にいて、あなたの前方にあるすべてのレーンに少なくとも1つのスペースがあれば、 15 * 4 = 60,100-60 =実際の損傷の40%。

今はそんなことはありません。私は0を返す難しさを持っています...私は

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 
    } 
} 

「その結果型がvoidであるメソッドから値を返すことはできません」あなたがvoid値を返すことができないと言うエラー...

を得続けます私はまだ配列/グリッドのチェックの部分を追加する必要がありますが、その問題について別の問題、別の問題、実際の配列自体があります。

+0

平等のための二重の等号を使用するには、 '=='チェック。単一の等号「=」は割り当てのためのものです。また、 'Blanks'クラスには戻り値の型がありません。したがって、あなたは何かを返すことはできません。これを 'public int Blanks(int l)'に変更し、そこに挿入された 'int'キーワードを書き留めます。 – Ian

+0

ありがとう!それは非常に速い答えでした! – DarixGoof

+0

ああ、おそらくそれを* comment *と呼んで、質問に答える方がいいでしょう - または*コメント回答の質問(?)* ... – Ian

答えて

0

整数値を返すにはこのメソッドの戻り値の型について言及する必要があります。また、最初のifステートメントでは、代わりに代入演算子を使用しています。

また、あなたはなぜリターンアフターリターンを使用したのですか?私はあなたが最初に休憩してから最後に戻らなければならないと思います。

もう1つ追加します。 forループは中かっこを含む必要があります。あなたのコードに従って最初のif文だけが実行されます。

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 
    } 
} 

私はあなたのロジックに足を踏み入れていません。この後に問題が発生した場合はコメントしてください。

+0

さて、私もあなたの修正を試みました...しかし、私は何かを実現しました..私は私のループを '私が<6'にすれば、これは配列が6回チェックすることを意味しますか?それとも6つのステップを経るのですか? – DarixGoof

0

あなたはpublic int Blanks(int l) {
にメソッドヘッダーを変更する必要がありますし、あなたはそれの前にメソッドの値を返すためbreak;キーワードを削除する必要がありますし、未到達の文になります。

0

あなたがここにforループを使用している理由を私は理解していないが、これはそれを行う方法です:

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

しかし、あなたの方法は5を返しますl==0ている場合には、

あなたが01を返したい場合、あなたはループtrue-false

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

及び方法を削除する必要があります。

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

私はここで間違ってループを使用していると思います...残念です。まだコーディングが新しく、それはすべてです。私は私の方法が非常に荒いことを知っています。その事実上無理な力...私の次の質問..私はこれを行うことができるかどうかはわかりませんが... ...確かに、それが真実か間違っているかどうかを確認する – DarixGoof

+0

@DarixGoofより明示できますか?真と偽の時はいつですか?正確に何を返す必要がありますか? – Andrew

+0

基本的に、私は3x3配列を取って、 "Lane"に何かがあるかどうかを確認しています レーンはRow#+ Col#です... So [2] [2]はレーン4です、[2] [1]。[1] [2]レーン3、[2] [0]。[1] [1]。[0] [2]レーン2、[1] [0]。[0] [1]はレーン1、[0] [0]はレーン0 それぞれのレーンの座標に何かがある場合は、誤った意味でリターンに1を加えないでください。 それぞれの座標系に座標がない場合は、真を意味します。Returnに1を加えます。 これは別のコードのチェックシステムです – DarixGoof

関連する問題