2017-01-12 8 views
-1

私はまだJavaにとって非常に新しいですし、ループに問題があります。価値の無限戻り値

私はランダムな値を持つオブジェクトを作成しようとしています。 私は私のメインのメソッドを呼び出すとき、無限のオブジェクトを返します。私は1をヒットした場合、私はchoosePick

 import java.util.Scanner; 

     public class main_1vs1 { 

      public static void main(String[] args) { 

       Scanner sc = new Scanner(System.in); 


       int knight =0; 
       while(knight != 1 && knight !=2) { 

        System.out.println("which knight do you choose? Pick is fast (1), Crock is strong (2). " + "\n" + "Make your choice :" + "\n"); 
        knight = sc.nextInt(); 

       if (knight==1){ 
         knights.choosePick(); 
         break; 
        } 
       else if (knight==2){ 
         knights.chooseCrock(); 
         break; 
       } 

       } 
    } 
} 

を呼び出したい

public class knights{       

    public double health; 
    public weapons weapons; 
    public double speed; 

    public knights(double health,int weapons, double speed){   
     this.health = health; 
     this.weapons = new weapons(weapons); 
     this.speed = speed; 
    } 

    public static knights choosePick(){ 

      knights Pick = new knights((70 + (Math.random() * (130 - 70))),-1,(100 + (Math.random() * (150 - 100)))); 
      System.out.println("The knight Pick is equipped with " + Pick.weapons.type + ". Its damages are " +Pick.weapons.atk + " It has " + Pick.weapons.acc + " accuracy " + "\n" + "He has " + Pick.health + " Health points" + "\n" + "His speed is " + Pick.speed); 
      return choosePick(); 
    } 
} 

、それはknight.Pickの無限の量を作成し、スタットdescripitionの無限の量を表示します。

+1

方法 'choosePickは、()'あなたが無限ループ... – alfasin

+0

'choosePickに取得している(最後の行)自体を呼び出すので、 () 'は' Pick'を返さなければなりません。 – khelwood

+0

クラス、変数などについては、Java [命名規則](http://www.oracle.com/technetwork/java/codeconventions-135099.html)に従う必要があります。要件ではありませんが、追加情報を一目で確認するのに役立ちます。たとえば、 'knight'クラスは' Knight'で、変数 'Pick'は' pick'でなければなりません。 – Frelling

答えて

1

あなたの方法choosePickreturn choosePick()で終わるので、あなたはそれはあなたがこれに達すると、単に

return Pick; 
2

returnを置き換え、それは無限のようにあなたがStackOverflowErrorで終わるであるように、自分自身を呼び出すことを意味し、この動作を取得声明knights.choosePick();は、あなたはここで再帰

public static knights choosePick(){ 

      knights Pick = new knights((70 + (Math.random() * (130 - 70))),-1,(100 + (Math.random() * (150 - 100)))); 
      System.out.println("The knight Pick is equipped with " + Pick.weapons.type + ". Its damages are " +Pick.weapons.atk + " It has " + Pick.weapons.acc + " accuracy " + "\n" + "He has " + Pick.health + " Health points" + "\n" + "His speed is " + Pick.speed); 
      return choosePick(); 
      // ^^^ calling recursion 

ソリューション

の内側に閉じ込められています
public static knights choosePick(){ 

      knights Pick = new knights((70 + (Math.random() * (130 - 70))),-1,(100 + (Math.random() * (150 - 100)))); 
      System.out.println("The knight Pick is equipped with " + Pick.weapons.type + ". Its damages are " +Pick.weapons.atk + " It has " + Pick.weapons.acc + " accuracy " + "\n" + "He has " + Pick.health + " Health points" + "\n" + "His speed is " + Pick.speed); 
      return Pick; 
     //   ^^^ return object instead of calling this function again 
0
あなた knightsクラスで

、方法choosePick、あなたがすべきではないreturn choosePick()しかしreturn Pick;

+0

すぐにお返事ありがとうございます! –