java DnD骰子滚动模拟

d7v8vwbk  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(201)

我正在尝试为我的朋友做一个模拟的骰子滚动游戏。我想利用两个类Dice和一个子类VarDice,它可以让用户选择多少边。然而,我正在努力让我的派生类正常工作。
这是我的父类:

import java.util.Random;

public class Dice {
   
   protected int numRolled;
   final Random rand = new Random();
    
    
   public void roll() {
        numRolled = rand.nextInt(5) + 1;
   }
   public int getNumRolled() {
      return numRolled;
   }
   
}

这是一个派生类:

import java.util.Random;
    
    
    public class VarDice extends Dice {
    
       public static void main(String[] args) {
            Scanner scnr = new Scanner(System.in);
            int numSides;
            
            public void setNumSides(int sides) {
                numSides = sides;
            }
            
           public int getNumSides() {
              return numSides;  
            }
            
            @Override
            public void roll() {
            numRolled = rand.nextInt(numSides) + 1;
           }
    
    }
    }

最后是我的主要代码:

import java.util.Scanner; 

    public class Main {
    
       public static void main(String[] args) {
            Scanner scnr = new Scanner(System.in);
             int numSides;

             VarDice dice = new VarDice();

             numSides = scar.nextInt();

             dice.setNumSides(numSides);
             
             dice.roll();
             System.out.println("The dice come up " + dice.getNumRolled()); 
        
    
        }
    
    }

我希望用户能够输入骰子有多少面以及有多少个骰子,但是我的VarDice类没有很好地覆盖roll方法,并且我对我得到的错误有点迷失......我感谢帮助并希望格式是适当的。

ar7v8xwq

ar7v8xwq1#

这里有一些问题:

  1. VarDice的代码在一个不属于这里的main方法中。
    1.正如@Bohemian在评论中指出的那样,在这里,你并不需要两个继承的类。我会删除父类,因为默认情况下6边可以由默认构造函数处理。
    1.是的,@Bohemian,“Dice”是“Die”的复数。
    你的Die类可能看起来像这样:
import java.util.Random;

public class Die {
    private final Random rand;
    private int numSides;
    private int numRolled;

    public Die(int numSides) {
        this.rand = new Random();
        this.numRolled = -1;
        // custom no. of sides, 6 if invalid
        this.numSides = numSides > 0 ? numSides : 6;
    }

    public Die() {
        this(6); // 6 is default
    }

    public void setNumSides(int sides) {
        numSides = sides;
        numRolled = -1;
    }

    public int getNumSides() {
        return numSides;
    }

    public int getNumRolled() {
        if (numRolled < 0) {
            roll();
        }
        return numRolled;
    }

    public int roll() {
        numRolled = rand.nextInt(numSides) + 1;
        return numRolled;
    }
}

你可以在你的应用程序中使用这个类:

import java.util.Scanner;

public class App {

    public static void main(String[] args) {
        // use default die
        Die die = new Die(); // create instance with default no of sides
        System.out.println(die.roll()); // roll die and print result
        System.out.println(die.getNumRolled()); // print rolled number again
        // use custom die
        Scanner scanner = new Scanner(System.in);
        System.out.print("Set number of sides (greater than 0): ");
        Die customDie = new Die(scanner.nextInt());
        System.out.println(customDie.roll()); // roll custom die
        scanner.close();
    }

}
tvokkenx

tvokkenx2#

我注意到的几个错误:
线numSides = scar.nextInt();应该是numSides = scnr.nextInt();
类VarDice已经将所有内容 Package 在public static void main(String[] args) {...}中。删除此 Package 以确保代码是类的一部分,而不是方法的一部分。
有了这些变化,代码为我工作。

相关问题