[英]Returning a value to another class and storing
假設給定一個類 Die,它包含一個六面骰子的隨機值。
另一個類PairOfDice
需要訪問 Die 中的getvalue
並存儲兩個 die 值。
執行 PairOfDice 時出現錯誤:找不到符號。
如何解決這個問題? 對java代碼還有其他建議嗎?
public class Die {
public static Random rand = new Random();
private int sides; // Number of sides
private int value; // Die's value
public Die() {
sides = 6;
roll();
}
public void roll() {
value = rand.nextInt(sides) + 1;
}
public int getSides() {
return sides;
}
public int getValue() {
return value;
}
給出的第二類是:
public class PairOfDice {
private int dieOne;
private int dieTwo;
public void main(String[] args){
Die die;
die = new Die();
}
private void dieOne(int value){
dieOne = die.getValue();
}
private void dieTwo(int value){
dieTwo = die.getValue();
}
public int getDieOneValue(){
return dieOne;
}
public int getDieTwoValue(){
return dieTwo;
}
}
這個任務應該被概括:我用兩個公共構造函數編寫了 Die 類。 如果構造函數不帶參數,則骰子的默認大小為 6,否則您可以有任意數量的邊。 然后,我用兩個構造函數編寫了 Dice 類。 第一個有骰子的數量(有 6 個面),第二個有帶有首選面的骰子列表。 如果您想學習如何概括問題(任何問題),您可以查看我的代碼。 (當然,它可以更高效、更優雅地完成,但這里是簡單的代碼):
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class Die {
private Random RAND = new Random();
private int noOfSides;
private int value;
// Default constructor without the parameter of sides gives the six sized die
public Die() {
this.noOfSides = 6;
}
// The constructor WITH number of sides
public Die(int noOfSides) {
this.noOfSides = noOfSides;
}
// rolling the die
public void roll() {
this.value = RAND.nextInt(noOfSides) + 1;
}
public int getValue() {
if (value == 0) roll(); // if the die is never rolled -> roll it!
// else return the rolled value
return value;
}
// just for curiosities
public int getNoOfSides() {
return noOfSides;
}
public String toString() {
return "Die has the " + noOfSides + " sides, and the last roll value was " + getValue();
}
}
class Dices {
private int noOfDices;
private List<Die> myDices = new ArrayList<Die>();
// NO constructor without the number of dices
private Dices() {
}
public Dices(int noOfDices) {
this.noOfDices = noOfDices;
// example is for 6 sided dices
for (int i = 0; i < noOfDices; i++) {
getMyDices().add(new Die());
}
}
// example with the list of dices with predefined sizes
public Dices(List<Die> myDices){
this.myDices = myDices;
}
public List<Die> getMyDices() {
return myDices;
}
public String toString() {
String s = "";
for (Die die : getMyDices()) {
s = s + die + "\n";
}
return s;
}
}
public class Answer {
public static void main(String[] args) {
//test with two dices (6 size):
Dices twoDices = new Dices(2);
System.out.println(twoDices);
//test with 4 dices size 3, 7, 9, 22
Dices fourDices = new Dices
(List.of(new Die(3),
new Die(7),
new Die(9),
new Die(22)));
System.out.println(fourDices);
}
}
可以看到,如果骰子從未擲出,則getValue
首先擲出骰子,然后返回值。 否則,您可以擲骰子,該值將存儲到私有字段值中...
我們將假定Die
類按預期工作。
因此,人們可以考慮對PairOfDice
進行的這些更改可能會解決當前的問題。
public class PairOfDice {
private Die dieOne = new Die();
private Die dieTwo = new Die();
public static void main(String[] args) {
PairOfDice pair = new PairOfDice();
System.out.printf("Pair: %d - %d%n", pair.getDieOneValue(), pair.getDieTwoValue());
}
public int getDieOneValue() {
dieOne.roll();
return dieOne.getValue();
}
public int getDieTwoValue() {
dieTwo.roll();
return dieTwo.getValue();
}
}
PairOfDice
類應該保存對兩個骰子的引用(在private Die
實例變量中)。
getDieXValue()
方法使用實例變量,並在生成roll()
后返回一個值。
現在,問題是要求是存儲兩個骰子的values
,還是只是訪問獲取值的能力。 如果確實需要存儲值,那么可以這樣做:
public class PairOfDice {
private int dieOneValue;
private int dieTwoValue;
public PairOfDice {
Die die = new Die();
// get a value for the first die
die.roll();
dieOneValue = die.getValue();
// get a value for the 2nd die
die.roll();
dieTwoValue = die.getValue();
}
public int getDieOneValue() {
return dieOneValue;
}
...
就個人而言,如果要創建對象,則存儲和使用這些對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.