2017-01-12 2 views
-1

Ich bin immer noch sehr neu in Java und habe ein Problem mit einer Schleife.Endlose Rückgabe von Wert

Ich versuche, ein Objekt mit zufälligen Werten zu machen. Wenn ich die Methode in meinem Haupt aufrufen, gibt es endlose Objekte zurück.

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(); 
    } 
} 

Ich möchte 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; 
       } 

       } 
    } 
} 

nennen Wenn ich 1 getroffen, wird es endlose Menge an knight.Pick schaffen und zeigen endlose Menge an stat descripition.

+1

Da die Methode 'choosePick()' nennt sich (letzte Zeile) Sie in einer Endlosschleife immer ... – alfasin

+0

'choosePick() 'sollte' Pick' zurückgeben, nicht selbst zurückgeben. – khelwood

+0

Als eine Randnotiz sollten Sie Java [Namenskonventionen] (http://www.oracle.com/technetwork/java/codeconventions-135099.html) für Ihre Klassen, Variablen usw. folgen. Dies ist zwar keine Voraussetzung, tut es aber helfen Sie, zusätzliche Informationen auf einen Blick bereitzustellen. Zum Beispiel sollte die Klasse 'knight'' Knight' sein und die Variable 'Pick' sollte' pick' sein. – Frelling

Antwort

1

Sie dieses Verhalten, weil Ihre Methode choosePick mit return choosePick() endet, was bedeutet, dass es selbst nennt, so dass es endlos ist somit am Ende mit einem StackOverflowError auf, ersetzen Sie einfach die return mit

return Pick; 
2

Sobald Sie dies erreichen Anweisung knights.choosePick(); werden Sie in Rekursion hier

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 

Lösung

gefangen
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

In Ihrem knights Klasse, Methode choosePick, sollten Sie nicht return choosePick() aber return Pick;

+0

Vielen Dank für die schnelle Antwort! –