- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的教授决定变聪明,为我的扑克项目设计了一手名为 EVEN STRAIGHT 的牌。这就像顺子,只是牌必须是连续的偶数。例如- 8,6,2,4,10 是偶数顺子。此外,一张 A(值为 1)可以用作“高端”或“低端”,这意味着它可以是 1 还是 14,具体取决于其他牌。我无法按升序对数组中卡片的值进行排序,因为我们无法在此项目中使用 .sort 方法。有人能帮我吗?这也是一个介绍性的 Java 类,因此请尽量使其简单。谢谢。这是我目前所拥有的......
//可以假设只有 5 张卡片作为参数传入。
public static boolean hasEvenStraight(Card [] cards) {
boolean evenCard = false;
int [] value = new int[cards.length];
for(int i = 0; i<cards.length; i++){
Card myCard = cards[i];
value[i] = myCard.getValue();
if(value[i]%2 == 0){
evenCard = true;
}
else
evenCard = false;
}
if(evenCard){
//This is where I am stuck
}
return false;
}
最佳答案
首先,您的代码中存在逻辑错误。在您的 for
循环中,您正在检查当前卡片是偶数还是奇数。但是当循环结束时,剩下的就是你是否看过最后一张牌。你需要检查它们是否都是偶数。
for(int i = 0; i<cards.length; i++){
Card myCard = cards[i];
value[i] = myCard.getValue();
if ( value[i] == 1 ) {
value[i] = 14;
}
if(value[i]%2 != 0)
return false
}
}
这个循环,如果它发现一张牌不是偶数,它会立即返回 false,因为即使是奇数牌也意味着你没有偶数顺子。所以在它完成后你知道你有所有的偶数。
但这当然是不够的。您想知道卡片是否连续。诀窍在这里:您实际上不必将所有卡片值都保存在该 value
数组中。您只需要保留最高的一个和最低的一个。循环结束后,如果你知道它们都是偶数,并且你的最高 - 你的最低 = 8,则说明你有连续的偶数,即偶数顺子。
为什么?因为如果它们不是连续的,那么即使在中间也会有缺失,对吧?但是,如果最低点比最高点少 8,则无法将 3 张牌推到它们之间以使它们都相等。
但是我们需要注意相同点数的牌,比如黑桃2和红桃2。他们会破坏这个原则。如果它们存在,那也不是一条直线。
为了检查这一点,我们必须为我们处理的每个卡值保留一个标志,说“我们是否已经处理了这个卡值”?为此,我们可以使用类似 Set
的东西。在检查每个数字时,我们会问:“这个数字在我们已经检查过的数字集中吗?”。如果是这样,那么当然,这不是偶数顺子。如果不是,我们将当前数字添加到集合中,以便可以检查后面的数字。
对于范围较小的整数
,我们可以在没有实际 Java Set
的情况下执行此操作。我们使用一个名为 alreadyThere
或类似名称的 boolean 值数组。索引 i
处的元素表示“我们是否检查了值为 i
的卡片”。这有点浪费空间,因为我们永远不会使用奇数索引或零和一索引,但它很容易实现。只需检查 alreadyThere[cardValue]
是否为 true
。当然,在我们检查它是一个唯一的数字之后,我们将 alreadyThere[cardValue]
设置为 true
以供下一次迭代检查。
那么让我们修改你的方法:
public static boolean hasEvenStraight(Card [] cards) {
int low = 20; // There is no 20 card.
int high = 0; // There is no 0 card.
// This array is a bit wasteful as it won't all be used,
// but it's straightforward this way.
boolean[] alreadyThere = new boolean[15];
for(int i = 0; i<cards.length; i++){
Card myCard = cards[i];
int currValue = myCard.getValue();
// Handle ace. If it's 1 it's not an
// even hand anyway, so assume it's 14.
if ( currValue == 1 ) {
currValue = 14;
}
// If any card is not even, this is not an Even Straight.
if(currValue%2 != 0){
return false;
}
// We have two cards of the same number
// (E.g. 2 of spades and 2 of hearts). So
// not a straight.
if ( alreadyThere[currValue] ) {
return false;
}
alreadyThere[currValue] = true;
// To get the lowest and highest, compare each value to
// existing lowest and highest and change them accordingly.
if ( currValue > high ) {
high = currValue;
}
if ( currValue < low ) {
low = currValue;
}
}
// Loop finished. All the numbers are even, now check if they
// are consecutive.
return ( high - low ) == 8;
}
关于java - 在扑克牌中找到 EVEN STRAIGHT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26962884/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!