-2

我正在制作一个名为“Amazing Pets”的非常简单的 Java 应用程序。它涉及人类及其宠物(猫或狗)。在这种情况下,我们正在处理 Dogs。如何为人类创建一个实例方法(称为 makeDogMakeNoise),该方法调用 Dog 上的 makeNoise 并将随机整数作为参数传递?makeNoise 方法将随机噪声字符串打印到控制台。例如“Ghost barks ”、“Ghost woofs”、“Ghost whimpers。任何人都可以帮忙解决这个问题,因为我似乎无法在网上找到任何可靠的资源?提前谢谢你。

AmazingPets.java

public class AmazingPets {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    System.out.println("Welcome to Pets and Humans! Created By Marc Beepath.\n____________________________\n");

    Dogs firstDog = new Dogs("Ghost");
    Humans firstName = new Humans("Alex");
    Dogs secondDog = new Dogs("Paperbag");
    Humans secondName = new Humans("Michael");
    Cats firstCat = new Cats("Tom");
    Cats secondCat = new Cats("Mr Furball");
    Humans thirdName = new Humans("Bryan");
    Humans fourthName = new Humans("Julie");
    System.out.printf("%s's dog's name is %s.\n", firstName.getHumanName(), firstDog.getDogName()); 
    System.out.printf("%s's dog's name is %s.\n", secondName.getHumanName(), secondDog.getDogName());
    System.out.printf("%s's cat's name is %s.\n", thirdName.getHumanName(), firstCat.getCatName());
    System.out.printf("%s's cat's name is %s.\n", fourthName.getHumanName(), secondCat.getCatName());

    System.out.printf("\n\nHow many Humans have been created? To get your answer type in the console 'population'. ");
    Scanner scan = new Scanner(System.in);
    String myLine = scan.nextLine();
    String pop = "population";
    if (myLine.equalsIgnoreCase(pop)) {
        System.out.printf("There are %s Humans.\n", Humans.populationCount());
    } else {
        System.out.printf("There was an error getting the Population.\n");
    }
}    

人类.java

public class Humans {
    private String mHumanName;
    private static int humanCount = 0;
    public Humans(String humanName){
        mHumanName = humanName;
        humanCount++;
    }
    public String getHumanName(){
        return mHumanName;
    }

     public static int populationCount() {
        return humanCount;
    }
}

狗.java

public class Dogs {
    private final String mDogName;

    public Dogs(String dogName){
        mDogName = dogName;
    }
    public String getDogName(){
        return mDogName;
    }
}
4

3 回答 3

2

可以使用 java.lang.Math.random() 或 java.util.Random 获得随机整数。

下面是我如何使用 Math.random() 获得 0 和大小(另一个 int)之间的随机 int:

    int randomInd = (int)((size+1)*Math.random()) //needs casting to int as a double is returned

现在使用 java.util.Random:

    Random r = new Random();
    int randomInd = r.nextInt(size+1);

你应该意识到你的设计可以根据上面的评论得到很大的改进。想想你将如何回答以下问题:

  1. 人类可以拥有超过 1 只宠物吗?人也可以有猫和狗吗?
  2. Human 类应该包含 makeDogNoise() 和 makeCatNoise() 方法还是只包含 makePetNoise() 方法?
  3. Human、Dog、Cat 比 Humans 等复数形式更好地描述对象
于 2015-05-24T18:06:20.887 回答
0

尝试这个:

    公共类人类{
    私人字符串 mHumanName;
    私有静态 int humanCount = 0;
    公共人类(字符串人类名称){
        mHumanName = 人名;
        人类计数++;
    }
    公共字符串 getHumanName(){
        返回人名;
    }

     公共静态int人口计数(){
        返回人类计数;
    }

    公共无效makeDogMakeNoise(狗d){
        d.makeNoise(Math.random());
    }
    }

    公共类狗{
    私有最终字符串 mDogName;
    私人字符串[] strs = {“吠声”,“woofs”,“呜咽”};

    公共狗(字符串狗名){
        mDogName = 狗名;
    }
    公共字符串 getDogName(){
        返回mDogName;
    }

    公共无效makeNoise(int n){
        System.out.println("鬼"+strs[(int)(n*(strs.length-1))]);
    }
    }

    公共类 AmazingPets {

    /**
     * @param args 命令行参数
     */
    公共静态无效主要(字符串[]参数){
        System.out.println("欢迎来到宠物和人类!由 Marc Beepath 创建。\n____________________________\n");

        狗 firstDog = new Dogs("Ghost");
        人类名字 = new Humans("Alex");
        firstName.makeDogMakeNoise(firstDog);

        狗 secondDog = new Dogs("Paperbag");
        人类 secondName = new Humans("Michael");
        secondName.makeDogMakeNoise(secondDog);

        猫 firstCat = new Cats("Tom");
        猫 secondCat = new Cats("毛球先生");
        人类 thirdName = new Humans("Bryan");
        人类第四名 = 新人类(“朱莉”);
        System.out.printf("%s的狗叫%s。\n", firstName.getHumanName(), firstDog.getDogName());
        System.out.printf("%s的狗叫%s。\n", secondName.getHumanName(), secondDog.getDogName());
        System.out.printf("%s的猫叫%s。\n", thirdName.getHumanName(), firstCat.getCatName());
        System.out.printf("%s的猫叫%s。\n", FourthName.getHumanName(), secondCat.getCatName());

        System.out.printf("\n\n创建了多少人类?在控制台'population'中输入你的答案。");
        扫描仪扫描 = 新的扫描仪(System.in);
        字符串 myLine = scan.nextLine();
        字符串 pop = "人口";
        如果(myLine.equalsIgnoreCase(pop)){
            System.out.printf("有 %s 个人类。\n", Humans.populationCount());
        } 别的 {
            System.out.printf("获取人口时出错。\n");
        }
    }    

于 2015-05-24T18:07:07.103 回答
0

编辑:误读了问题的“随机数”部分。

为了让人类告诉他/她的一只狗“发出声音”,他/她首先需要参考狗。

为此,您可以在 Humans 类中定义 makeDogMakeNoise 方法,以便它接受一个参数(即对 Dog 的引用):

public void makeDogMakeNoise(Dogs dog){
    // Tell the specified Dog to make one of n random noises

    // Generate a random integer between 0 and 9
    int n = (int)(Math.random() * 10);

    // Now you can tell the dog to make a noise
    dog.makeNoise(n);
}

您需要在 Dogs 类中定义 makeNoise 方法:

public void makeNoise(int n){
    /*
     * Do what you need to for this Dog to "make a noise"
     */
}

您现在可以执行以下操作:

Humans johnSnow = new Humans("John Snow");
Dogs ghost = new Dogs("Ghost");

// Tell the dog to make a noise
johnSnow.makeDogMakeNoise(ghost);

此外,请考虑将您的类名从复数形式更改(改用 Human、Dog、Cat)。

希望有帮助。

于 2015-05-24T18:26:00.050 回答