java - 我怎样才能把它变成一个for循环?
问题描述
我正在用 Java 编写 Mastermind 程序。所以用户必须输入钉子和颜色的数量,然后会随机生成一个代码,程序会做它的事情并告诉他们是否得到了代码。我有一堆 IF 语句,我尝试将其放入 for 循环中,因此当用户增加 peg 的数量时我不必创建 if 语句,但这不起作用。有什么建议吗?这是代码:
public void program(int [] peg, int amtpegs,int amtcolors) {
Random generator = new Random();
KeyboardReader reader = new KeyboardReader();
int color = 0, guess = 1,pegs = 0;
int [] guesses = new int[10];
for(int i = 0; i<peg.length;i++) {
peg[i]=generator.nextInt(amtpegs)+1;
System.out.println(peg[i]);
}
//Repeat till the player wins
while(true){
//Get input from user
for(int x = 0; x<amtpegs;x++)
{
guesses[x]=reader.readInt("Enter your numbers: ");
}
//Check if peg in correct index
for(int y = 0; y<amtpegs;y++) {
if (peg[y]==guesses[y]){
pegs++;
}
//Check if the color is correct
if (guesses[0]==peg[0] || guesses[0]==peg[1] || guesses[0]==peg[2]){
color++;
}
if (guesses[1]==peg[1] || guesses[1]==peg[0] || guesses[1]==peg[2]){
color++;
}
if (guesses[2]==peg[0] || guesses[2]==peg[1] || guesses[2]==peg[2]){
color++;
}
if (guesses[3]==peg[3] || guesses[3]==peg[1] || guesses[3]==peg[2]){
color++;
}
System.out.println("You have "+pegs+" correct peg(s) and "+color+" correct colors");
//Exit if player wins
if (color==amtcolors && pegs==amtpegs){
System.out.println("You have broken the code in "+guess+" guesses");
break;
}
//Increment guess count
guess++;
//Reset the color and peg value
color=0;
pegs=0;
}
我尝试通过用 for 循环中的 x 和 j 替换索引来将 if 或语句变成 for 循环:
for(int x = 0; x<amtpegs;x++) {
// System.out.println(x+"n");
for(int j = 0; j<amtpegs; j++){
// System.out.println(j+"N");
if (guesses[x]==peg[j]){
color++;
if (color==amtcolors && pegs==amtpegs){
System.out.println("You have broken the code in "+guess+" guesses");
break;
}
}
但这不起作用,因为我的可变颜色值增加了。例如:如果我输入 10 个钉子和 9 种颜色,它将输出 10 个钉子和 20 或 30 种颜色。
解决方案
你的模式在这里:
//Check if the color is correct
if (guesses[0]==peg[0] || guesses[0]==peg[1] || guesses[0]==peg[2]){
color++;
}
if (guesses[1]==peg[1] || guesses[1]==peg[0] || guesses[1]==peg[2]){
color++;
}
if (guesses[2]==peg[0] || guesses[2]==peg[1] || guesses[2]==peg[2]){
color++;
}
if (guesses[3]==peg[3] || guesses[3]==peg[1] || guesses[3]==peg[2]){
color++;
}
是循环猜测而不是挂钩。你的 for 循环很接近,只需要调整,这样你就不会在钉子上循环:
for(int x = 0; x<guesses.lengh;x++)
if (guesses[x]==peg[0] || guesses[x]==peg[1] || guesses[x]==peg[2]){
color++;
}
*编辑我注意到我使用了atmpegs
. 如果我们只是改变猜测,那么它应该是猜测数组的长度。
如果您想使用猜测数组和可变长度的钉子数组,那么您将在猜测数组和钉子数组上嵌套和循环。
for(int i = 0; i < guesses.length; i++)
{
for(int j = 0; j < peg.length; j++)
{
if(guesses[i] == peg[j])
color++;
}
}
推荐阅读
- asp.net - 如何使用 Cofluent 库在 Windows 上通过 Kerberos 身份验证连接到 Kafka 集群?
- html - 外部形状以占据文本的全高
- c# - 在 Web API 中未检测到对象数组
- button - 带有活动类按钮的引导 4 个选项卡不起作用
- ios - iOS + React Native - 内存泄漏
- excel - 如何让excel从两个子字符串动作中决定?
- execution - tmux:复制模式停止执行 shell 命令
- maven - 错误:自动模块不能与 jlink 一起使用:-带有 JavaFX 的 Maven
- android - rx.Subscriber 实体退订后不能重用?
- kubernetes - 从 kubernetes yaml 定义中的文件创建配置映射时,|+ 和 |- 有什么区别?