2015-11-28 5 views
-3

Я пытаюсь рекурсивно вызывать метод, пока не получу желаемый результат. Тем не менее, я хочу вызвать метод из другого класса и получить информацию из этого метода, чтобы использовать его в моем рекурсивном методе. Например, предположим, что у меня есть родительский класс с именем Cake, который содержит информацию о тортике, таком как его тесто (то есть количество теста), расширенный класс с конкретным типом торта, содержащий уникальный экземпляр теста, и у меня есть другой класс называемый Bakery, где я хочу фактически сделать торты, которые заказываются. У меня есть метод в Bakery под названием createCake, и я хочу рекурсивно вызывать этот метод до тех пор, пока в кастрюле не появится достаточно тесто для создания торта. Если количество тестового файла генерируется случайным образом в расширенном классе, как я могу вызвать метод getBatter из этого класса и получить информацию о количестве тестового материала, чтобы использовать его в моем рекурсивном методе создания тортов? Может ли кто-нибудь помочь мне с этим? Я делаю что-то похожее на это, но я не совсем понимаю, как бы я хотел получить информацию, чтобы заставить рекурсию работать. У меня есть пример кода ниже, так что вы можете иметь представление о том, что я пытаюсь сделать (я знаю, что это не очень точно). Любая помощь будет принята с благодарностью.Как вызвать метод рекурсивно?

import java.util.Random; 

public abstract class Cake 
{ 
    static Random gen = new Random(System.currentTimeMillis()); 

    public int type; //type of cake 
    public static int batter = gen.nextInt() * 3; //random amount of batter 

    public int getType() 
    { 
    return type; 
    } 

    public int getBatter() 
    { 
     return batter; 
    } 
} 


public class RedVelvet extends Cake 
{ 
    public int type; 
    public int batter = gen.nextInt(3)+6; //generates between 6-8 cups of batter inclusive 

    public int getType() 
    { 
    return 1; 
    } 
    public int getBatter() 
    { 
    return batter; 
    } 
} 

public class Chocolate extends Cake 
{ 
    public int type; 
    public int batter = gen.nextInt(3)+6; //generates between 6-8 cups of batter inclusive 

    public int getType() 
    { 
    return 2; 
    } 
    public int getBatter() 
    { 
    return batter; 
    } 
} 


public class Pound extends Cake 
{ 
    public int type; 
    public int batter = gen.nextInt(3)+6; 

    public int getType() 
    { 
    return 3; 
    } 
    public int getBatter() 
    { 
    return batter; 
    } 
} 

public class Bakery 
{ 
    import java.util.Scanner; 
    System.out.print("Enter desired size of cake to be baked (Must be at least 12):"); 
    desiredSize=scan.nextInt(); 

    public static void createCake(int desiredSize, int currentSize) //currentSize is the current amount of batter in the pan 
    { 
    if (currentSize == desiredSize) 
     return; 
    else if (currentSize < desiredSize) 
    { 
    //Recursively call createCake method so that batter continues to be added to the pan until there is enough to make the desired cake size. I want to get the batter information from one of the extended classes in order to add it to the cake. 
    } 
} 
+1

Ваш вопрос не очень понятно, пожалуйста, напишите некоторый код, т.е., классы, которые вы создали –

ответ

0

Это для школы или курса, потому что я лично не пошел бы по этому маршруту, но опять же это мое мнение. Это похоже на то, что я знаю о выпечке, и я могу с уверенностью сказать вам ... абсолютно ничего. Некоторые могут даже сказать это о моих навыках программирования/кодирования, но опять же, я не программист, и я сам преподаю практически во всех средах программирования, включая старый добрый сборник, большинство из которых я сейчас забыл. :/

Я должен думать, что когда дело доходит до выпечки тортов (или большинства вещей в этом отношении), должна быть установлена ​​какая-то точность, чтобы избежать отходов, и все мы знаем, что трата стоит денег. Я не слишком убежден в том, что генерация случайных количеств теста для торта достаточно точная для того, что вы, скорее всего, пытаетесь выполнить, но опять же, вы уже это знаете. Я заметил, что в ваших разных тортах все они генерируют случайное число от 6 до 8. Если все они делают то же самое, то зачем им?

Я не верю, что вам нужна рекурсия на всех, но вместо простой метод вызывается из цикла, например:

while (currentSize < desiredSize) { 
    currentSize+= getBatter(cake, desiredSize); 
} 

Вот как бы я это сделать, и я сейчас прошу прощения, если вы это это все совершенно бессмысленно:

import java.util.Random; 
import java.util.Scanner; 

public class Bakery { 


    public static void main(String[] args) { 
     getBaking(); // :) 

    } 


    private static void getBaking(){ 
     Scanner scan = new Scanner(System.in); 

     String cakeType = ""; 
     while (cakeType.equals("")) { 
      System.out.print("Enter desired cake to be baked (Pound, Chocolate, " 
        + "RedVelvet) or\nenter 'exit' to quit: -> "); 
      cakeType = scan.nextLine(); 
      if (cakeType.isEmpty()) { 
       System.out.println("\nYou must supply the name of cake to bake or " 
         + "enter 'exit' to quit!\n"); 
      } 
      else if (cakeType.toLowerCase().equals("exit")) { System.exit(0); } 
      else if (!cakeType.toLowerCase().matches("(pound|chocolate|redvelvet)")) { 
       System.out.println("\nYou must supply the name of cake as shown above!\n"); 
       cakeType = ""; 
      } 

     } 

     int desiredSize = 0; 
     String size = ""; 
     while (size.equals("")) { 
      System.out.print("\nEnter desired size of cake to be baked (must be at " 
        + "least 12\"): -> "); 
      size = scan.nextLine(); 
      if (size.isEmpty()) { 
       System.out.println("\nYou must supply the size of cake to bake or " 
         + "enter 'exit' to quit!\n"); 
      } 
      else if (size.toLowerCase().equals("exit")) { System.exit(0); } 
      else if (Integer.valueOf(size.replace("\"","")) < 12) { 
       System.out.println("\nYou must supply a cake size of 12\" or greater!\n"); 
       size = ""; 
      } 
     } 
     desiredSize = Integer.valueOf(size.replace("\"","")); 

     createCake(cakeType, desiredSize, 0); 
    } 

    public static void createCake(String cake, int desiredSize, int currentSize) { 
     //currentSize is the current amount of batter in the pan 
     while (currentSize < desiredSize) { 
      currentSize+= getBatter(cake, desiredSize); 
      System.out.println(currentSize); 
     } 

     System.exit(0); // Done! - Quit! 
    } 

    public static int getBatter(String cake, int desiredSize) { 
     Random gen = new Random(System.currentTimeMillis()); 
     // Since the random generation for the batter amount is the 
     // same for all cake types according to your code we just 
     // need this: 
     int batterAmount = gen.nextInt(3)+6; 

     // But if we want to be more specific for each Cake Type 
     // then we can do it this way but first create the required 
     // batter equations for each cake type and remove the /* and 
     // */ from the code but first comment out (//) the batterAmount 
     // variable declaration above. 
     // NOTE: Both cake diameter AND 'Height' should play into the factor 
     // of how much batter is required unless of course all cakes made are 
     // of the same height. 
     /* 
     int batterAmount = 0; 
     switch (cake.toLowerCase()) { 
      case "pound": 
       batterAmount = //batter amount to make 12 inch cake + (this much batter for a 1 inch cake * (desiredSize - 12)); 
       break; 
      case "chocolate": 
       batterAmount = //batter amount to make 12 inch cake + (this much batter for a 1 inch cake * (desiredSize - 12)); 
       break; 
      case "redvelvet": 
       batterAmount = //batter amount to make 12 inch cake + (this much batter for a 1 inch cake * (desiredSize - 12)); 
       break; 
     } */ 

     return batterAmount; 
    } 
} 

Ну, я надеюсь, что это помогло вам несколько или, по крайней мере, бросил мыслишка в духовке: P

+0

@DevilHnd Привет, я думаю, что цикл while будет лучшим решением для этого, но я должен использовать рекурсию. Я просто не знаю, как это сделать, поэтому я просто столкнулся с подобной проблемой с той, над которой работаю. Спасибо за вашу помощь, хотя :)! – salmon1407

Смежные вопросы