【发布时间】:2019-12-19 20:07:01
【问题描述】:
我正在尝试复制以下 while 循环,但它们交错我的“卡片”的方式不同。
这是我当前有效的 while 循环,我的目标是重新制作这个循环,但颠倒两个 card_force 数组的顺序:
while (index >= 0) {
card_force[index--] = bottom_half[j--];
card_force[index--] = top_half[i--];
}
这是我想要制作的 while 循环:
while (index >= 0) {
card_force[index--] = top_half[i--];
card_force[index--] = bottom_half[j--];
}
但是,如果两个循环都存在,则原始循环可以工作,但第二个 while 循环根本不工作,导致在 52 行上返回“null”。我需要它返回卡 27,然后是卡 1,然后是卡 26,然后是卡 2,依此类推。
我在解决看似简单的问题时遇到了很多麻烦。
这是我当前的代码:
String[] card_force = new String[52];
String[] card_force2 = new String[52];
int i = top_half.length - 1;
int j = bottom_half.length - 1;
int index = 51;
// Card out shuffle
while (index >= 0) {
card_force[index--] = bottom_half[j--];
card_force[index--] = top_half[i--];
}
// Card in shuffle
while (index >= 0) {
card_force2[index--] = top_half[i--];
card_force2[index--] = bottom_half[j--];
}
// Card out shuffle print
System.out.println("\nCard Shuffle:\n");
for (String card_force1 : card_force) {
System.out.println(card_force1);
}
// Card in shuffle print
for (String card_force1 : card_force2) {
System.out.println(card_force1);
}
}
代码运行时返回如下结果:
Card Shuffle:
Card number 1: King of Clubs
Card number 27: 10 of Spades
Card number 2: Jack of Clubs
Card number 28: King of Diamonds
Card number 3: 6 of Diamonds
Card number 29: 5 of Diamonds
Card number 4: Queen of Hearts
Card number 30: 4 of Hearts
Card number 5: 5 of Clubs
Card number 31: Queen of Diamonds
Card number 6: Ace of Hearts
Card number 32: 7 of Diamonds
Card number 7: 3 of Hearts
Card number 33: 9 of Hearts
Card number 8: 2 of Hearts
Card number 34: 10 of Diamonds
Card number 9: 10 of Clubs
Card number 35: Jack of Diamonds
Card number 10: 2 of Spades
Card number 36: 2 of Diamonds
Card number 11: 9 of Clubs
Card number 37: 2 of Clubs
Card number 12: 8 of Spades
Card number 38: 4 of Spades
Card number 13: 7 of Spades
Card number 39: Ace of Diamonds
Card number 14: 8 of Clubs
Card number 40: 9 of Spades
Card number 15: Jack of Hearts
Card number 41: 6 of Clubs
Card number 16: 3 of Diamonds
Card number 42: 7 of Hearts
Card number 17: 6 of Hearts
Card number 43: King of Hearts
Card number 18: 4 of Clubs
Card number 44: Ace of Clubs
Card number 19: 3 of Spades
Card number 45: 8 of Hearts
Card number 20: Ace of Spades
Card number 46: 5 of Hearts
Card number 21: 10 of Hearts
Card number 47: Jack of Spades
Card number 22: Queen of Clubs
Card number 48: 9 of Diamonds
Card number 23: Queen of Spades
Card number 49: 8 of Diamonds
Card number 24: 7 of Clubs
Card number 50: 5 of Spades
Card number 25: 4 of Diamonds
Card number 51: 6 of Spades
Card number 26: King of Spades
Card number 52: 3 of Clubs
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
null
【问题讨论】:
-
你能稍微清理一下这段代码,让它不包含被注释掉的东西,而只是展示工作或失败的案例吗?可以信任我们交换两行代码,但这样的代码比必要的要多,风格随意。清理缩进,扔掉 cmets,不要以使代码无法运行的方式重复,现在您将拥有好代码供他人查看。
-
第二个
while循环使用相同的indexvar,它被第一个while循环完全使用。所以第二个while循环永远不会被执行并且card_force2永远不会分配任何值,它只是一个包含52个元素的数组,从未为每个元素分配任何值,因此,所有52个元素都是null。要么将index重置为 51,要么只使用for循环 -
@Mike 'Pomax' Kamermans 抱歉,这里是新人,至少可以说是疯狂,哈哈。希望这会做
-
我建议阅读 this article 以获取有关如何调试代码的提示。
-
@BrógánMcShane:不,现在你已经让代码更难运行了。请确保它采用minimal reproducible example 形式(例如,人们复制粘贴您的代码,并让它通过
javac而无需更改任何内容,然后在调用时运行)。此外,您仍然显示这两种情况,这没有任何意义:如果您不重置任何索引,为什么要期望第二个 while 循环完全起作用?
标签: java arrays algorithm shuffle