Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在类中形成要由main调用的对象。Java代码_Java_Arrays_Class_Enumeration - Fatal编程技术网

在类中形成要由main调用的对象。Java代码

在类中形成要由main调用的对象。Java代码,java,arrays,class,enumeration,Java,Arrays,Class,Enumeration,我正在尝试创建一个模拟12面模具的阵列。使用for-each语句,当我在单个类中执行时,它将起作用。然而,我不得不从另一个班级去拜访它。是否有一种方法可以在公共类中创建对象(4个12面骰子),使用for-each语句,然后在main中调用并掷骰子 package gofirst; public class DodecaDice { int[] a = new int[13]; enum dieA{1, 8, 11, 14, 19, 22, 27, 30, 35, 38,

我正在尝试创建一个模拟12面模具的阵列。使用for-each语句,当我在单个类中执行时,它将起作用。然而,我不得不从另一个班级去拜访它。是否有一种方法可以在公共类中创建对象(4个12面骰子),使用for-each语句,然后在main中调用并掷骰子

package gofirst;




public class DodecaDice {
   int[] a = new int[13];


   enum dieA{1, 8, 11, 14, 19, 22, 27, 30, 35, 38, 41, 48}
   for (DieA nextDieA: DieA.values()){
        a[0++]=nextDieA;
}




}

我不知道你想要什么,但也许是这样的。您需要使用“for each”吗

虽然我只展示了一个骰子,但你可以在主方法中制作四个骰子。。。或者把它滚四次

import java.util.Random;

public class Dice {

   private int[] a = {1, 8, 11, 14, 19, 22, 27, 30, 35, 38, 41, 48};

   public Dice() {
       //do nothing for now
   }

   public int roll() {
       Random rand = new Random();
       int  key = rand.nextInt(12) + 1;
       return a[key];
   }


   public static void main(String args[]) {
       Dice d = new Dice();
       System.out.println(d.roll());



   }

}

我不完全确定你想要实现什么,但如果我做的是这样的事情,我可能会从一个
模具的基本概念开始,它的核心功能

public interface Die {
    public int getMinium();
    public int getMaximum();
    public int roll();
}
然后我会创建一个
抽象版
来填充最常见、最基本的功能,这样我就不需要一直重复我自己了

public abstract class AbstractDie implements Die {

    private final int minimum;
    private final int maximum;

    public AbstractDie(int minimum, int maximum) {
        this.minimum= minimum;
        this.maximum = maximum;
    }

    @Override
    public int getMinimum() {
        return minimum;
    }

    @Override
    public int getMaximum() {
        return maximum;
    }

    @Override
    public int roll() {
        return getMinimum() + (int)(Math.random() * getMaximum());
    }

}
最后是一些实现,例如

public class TwelveSidedDie extends AbstractDie {

    public TwelveSidedDie() {
        super(1, 12);
    }

}
Die[] dice = new Die[] {new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie()};
int sum = 0;
for (Die die : dice) {
    int roll = die.roll();
    System.out.println(roll);
    sum += roll;
}

System.out.println("Total: " + sum);
这将允许我在需要时使用该类,例如

public class TwelveSidedDie extends AbstractDie {

    public TwelveSidedDie() {
        super(1, 12);
    }

}
Die[] dice = new Die[] {new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie()};
int sum = 0;
for (Die die : dice) {
    int roll = die.roll();
    System.out.println(roll);
    sum += roll;
}

System.out.println("Total: " + sum);
应该注意的是,通过使用类似于

Die die = new TwelveSidedDie();
int rolls = 4;
for (int roll = 0; roll < rolls; roll++) {
    int result = die.roll();
    System.out.println(result);
    sum += result;
}

System.out.println("Sum: " + sum);
这将允许您传入任何
Die
的实现,并根据需要自动滚动它们


例如…

如果For循环不在方法中,这是如何编译的?还有什么。。。是[0++]吗?不管怎样,这就是我的建议:创建一个公共方法rollDie,返回滚动值。我不知道从哪里开始解释,你违反了书中的每一条规则……你有没有尝试过将
dieA
作为它自己的一个单独的类?类Die,然后创建尽可能多的你想知道的,我现在是一个糟糕的程序员。谢谢你抽出时间。我似乎从你们那里得到的是,我不能用for语句在单独的类中创建对象。然后在我的主课上调用数组?哇,这比我尝试的角度要优雅得多。我将把你的代码弄得一团糟,看看能从中学到什么。非常感谢!谢谢,我已经完成了这个节目。然而,我确实阅读了你所有的代码,从中学习了我能学到的一切。我真的很感谢你的帮助。有时候,再多的阅读表格和课本也比不上一个直接的例子!不,有时候你不得不跳起来,把事情搞砸;)
public class TwelveSidedDie extends AbstractDie {

    public TwelveSidedDie() {
        super(1, 12);
    }

}
Die[] dice = new Die[] {new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie(), new TwelveSidedDie()};
int sum = 0;
for (Die die : dice) {
    int roll = die.roll();
    System.out.println(roll);
    sum += roll;
}

System.out.println("Total: " + sum);