我有一个java程序,计算机将决定哪个玩家先行,然后选择随机数从阵列中删除。当玩家删除号码时,阵列将减少。所有这些都将使用随机完成。但是当我运行我的代码时,它并不是我所期望的。我可以知道我哪里出错吗?
这是我的代码:
[班级]
public class StickBag {
private int numOfSticks;
public StickBag(int numOfSticks)
{
this.numOfSticks = numOfSticks;
}
public int getNumOfSticks() {
return numOfSticks;
}
public void setNumOfSticks(int numOfSticks) {
this.numOfSticks = numOfSticks;
}
public int remove(int n)
{
numOfSticks = numOfSticks - n;
return numOfSticks;
}
}
[主要]
public class StickGameApp {
public static void main(String[] args) {
StickBag s1 = new StickBag(25);
System.out.println("Welcome to the game of sticks!");
System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board.");
int minP = 1;
int maxP = 2;
int randP;
int minN = 1;
int maxN = 10;
int randNum;
randP = minP + (int)(Math.random()*(maxP));
randNum = minN + (int)(Math.random()*(maxN));
for (int i=0; i<10; i++)
{
if(s1.getNumOfSticks() > randNum)
{
System.out.println("Computer player " + randP + " choose " + randNum + " sticks ");
s1.remove(randNum);
}
else
{
System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to.");
System.out.println("Computer player " + randP + " loses ");
}
}
}
}
当我运行代码时,它显示如下:
欢迎来到棍棒游戏!
董事会最初有25支。
电脑播放器2选择6支装
电脑播放器2选择6支装
电脑播放器2选择6支装
电脑播放器2选择6支装
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
计算机播放器2想要选择6支但是无法选择。 电脑播放器2输了
但我希望它显示如下:
欢迎来到棍棒游戏!
董事会最初有25支。
计算机播放器1选择5支。
计算机播放器2选择7支。
电脑玩家1选择7支装。
计算机玩家2想要选择7支但是无法选择。
电脑玩家2,你输了。
我可以知道我哪里出错吗?
答案 0 :(得分:1)
你的错误只是你把玩家和计算机randP
和randNum
的随机数生成器放在运行游戏的for循环之前,所以选择的随机数只会被执行一次。
你的代码应该是:
for (int i=0; i<10; i++)
{
randP = minP + (int)(Math.random()*(maxP));
randNum = minN + (int)(Math.random()*(maxN));
if(s1.getNumOfSticks() > randNum)
{
System.out.println("Computer player " + randP + " choose " + randNum + " sticks ");
s1.remove(randNum);
}
else
{
System.out.println("Computer player " + randP + " wants to choose " + randNum + " sticks but is unable to.");
System.out.println("Computer player " + randP + " loses ");
}
}
}
答案 1 :(得分:0)
首先,你选择了.player.outside the.loop,所以选择的任何内容都会一直运行
答案 2 :(得分:0)
您需要移动这两行代码:
randP = minP + (int)(Math.random()*(maxP));
randNum = minN + (int)(Math.random()*(maxN));
在for
循环开始时。这将确保在每次迭代时,您都可以选择一个新的播放器和一个新的阵列位置。
答案 3 :(得分:0)
我不确定这是否是您游戏的正确方法,但我希望您觉得它有用。
import java.util.*;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
StickBag s1 = new StickBag(25);
int total= s1.getNumOfSticks();
System.out.println("Welcome to the game of sticks!");
System.out.println("There are initially " + s1.getNumOfSticks() + " sticks on the board.");
int randP = 0;
int randNum;
int P1=0,P2=0;
for (int i=0; i<10; i++)
{
randP = rand.nextInt(2)+1;
randNum = rand.nextInt(10)+1;
if (s1.getNumOfSticks() - randNum > 0)
{
System.out.println("\n Computer player #" + randP + " chooses " + randNum + " sticks and takes them. ");
s1.remove(randNum);
System.out.println(" Computer player #" + (!(randP == 2) ? 2 : 1 ) + " wants to choose " + randNum + " sticks but is unable to.");
// Evaluate the score
if (randP == 1)
randP = (P1 = P1 + randNum);
else
randP = (P2 = P2 + randNum);
}
}
System.out.println("\n\n---------------------------------------------------------------------------");
System.out.println("\t Player #1 has " + P1 + " sticks and Player #2 has " + P2 + " sticks. \n" + ( (P1 > P2) ? "Player 1 wins" : "Player 2 wins"));
System.out.println("The sticks remaining in the bag are: " + s1.getNumOfSticks());}}