- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为这个问题创建一个解决方案:“让函数 BlackjackHighest(strArr) 接受传递的 strArr 参数,该参数将是代表二十一点牌的数字和字母数组。数组中的数字将被写出。例如,strArr 可能是 ["two","Three","ace","king"]。strArr 的完整可能性列表是:二、三、四、五、六、七、八、九、十、jack、queen、king、ace。你的程序应该输出below、above或blackjack,表示你是否有blackjack(数字加起来为21),以及你手中最大的牌与你是否有blackjack有关。如果数组包含一张 A,但你的手牌将高于 21,则必须将 A 计为 1。你必须始终尝试保持在 21 标记以下。因此,使用上述数组,输出应低于 King。在此示例中被计为 1,因为如果不是,您的分数就会高于 21。
另一个例子是,如果 strArr 为 ["four","ten","king"],则此处的输出应高于 king。如果您手上有 10 和一张人头牌,则将人头牌归还为“最大的牌”。如果您有多张人头牌,则重要性顺序是 J、Q、K。”
我尝试了以下代码
import java.util.*;
import java.io.*;
public class Main {
static String BlackjackHighest(String[] strArr) {
Card[] cards = new Card[strArr.length];
for (int i = 0; i < strArr.length; i++) {
cards[i] = new Card(strArr[i]);
}
Arrays.sort(cards, new Comparator<Card>() {
@Override
public int compare(Card card, Card card2) {
if (card.rating > card2.rating) return 1;
else if (card.rating < card2.rating) return -1;
return 0;
}
});
int total = 0;
boolean hasAce = false, aceUsed = false;
for (Card card : cards) {
if (card.rating == 14) {
hasAce = true;
}
if (total + card.topVal > 21) {
total += card.lowVal;
} else {
if (card.rating == 14) {
aceUsed = true;
}
total += card.topVal;
}
}
Card highest = cards[cards.length - 1];
if (hasAce && !aceUsed) {
highest = cards[cards.length - 2];
}
if (total < 21) {
return "below " + highest.repr;
} else if (total == 21) {
return "blackjack " + highest.repr;
}
return "above " + highest.repr;
}
class Card {
int lowVal = 0, topVal = 0, rating = 0;
String repr;
Card(String card) {
card = card.toLowerCase();
repr = card;
if (card.equals("two")) {
lowVal = 2; topVal = 2; rating = 2;
} else if (card.equals("three")) {
lowVal = 3; topVal = 3; rating = 3;
} else if (card.equals("four")) {
lowVal = 4; topVal = 4; rating = 4;
} else if (card.equals("five")) {
lowVal = 5; topVal = 5; rating = 5;
} else if (card.equals("six")) {
lowVal = 6; topVal = 6; rating = 6;
} else if (card.equals("seven")) {
lowVal = 7; topVal = 7; rating = 7;
} else if (card.equals("eight")) {
lowVal = 8; topVal = 8; rating = 8;
} else if (card.equals("nine")) {
lowVal = 9; topVal = 9; rating = 9;
} else if (card.equals("ten")) {
lowVal = 10; topVal = 10; rating = 10;
} else if (card.equals("jack")) {
lowVal = 10; topVal = 10; rating = 11;
} else if (card.equals("queen")) {
lowVal = 10; topVal = 10; rating = 12;
} else if (card.equals("king")) {
lowVal = 10; topVal = 10; rating = 13;
} else if (card.equals("ace")) {
lowVal = 1; topVal = 11; rating = 14;
}
}
}
public static void main (String[] args) {
// keep this function call here
Scanner s = new Scanner(System.in);
Main c = new Main();
System.out.print(c.BlackjackHighest(s.nextLine()));
}
}
但出现错误:
Main.java:10: error: non-static variable this cannot be referenced from a static context
cards[i] = new Card(strArr[i]);
最佳答案
这段代码成功了
import java.util.*;
import java.io.*;
class Main {
public static String BlackjackHighest(String[] strArr) {
Card[] cards = new Card[strArr.length];
for (int i = 0; i < strArr.length; i++) {
cards[i] = new Card(strArr[i]);
}
Arrays.sort(cards, new Comparator<Card>() {
@Override
public int compare(Card card, Card card2) {
if (card.rating > card2.rating) return 1;
else if (card.rating < card2.rating) return -1;
return 0;
}
});
int total = 0;
boolean hasAce = false, aceUsed = false;
for (Card card : cards) {
if (card.rating == 14) {
hasAce = true;
}
if (total + card.topVal > 21) {
total += card.lowVal;
} else {
if (card.rating == 14) {
aceUsed = true;
}
total += card.topVal;
}
}
Card highest = cards[cards.length - 1];
if (hasAce && !aceUsed) {
highest = cards[cards.length - 2];
}
if (total < 21) {
return "below " + highest.repr;
} else if (total == 21) {
return "blackjack " + highest.repr;
}
return "above " + highest.repr;
}
public static class Card {
int lowVal = 0, topVal = 0, rating = 0;
String repr;
Card(String card) {
card = card.toLowerCase();
repr = card;
if (card.equals("two")) {
lowVal = 2; topVal = 2; rating = 2;
} else if (card.equals("three")) {
lowVal = 3; topVal = 3; rating = 3;
} else if (card.equals("four")) {
lowVal = 4; topVal = 4; rating = 4;
} else if (card.equals("five")) {
lowVal = 5; topVal = 5; rating = 5;
} else if (card.equals("six")) {
lowVal = 6; topVal = 6; rating = 6;
} else if (card.equals("seven")) {
lowVal = 7; topVal = 7; rating = 7;
} else if (card.equals("eight")) {
lowVal = 8; topVal = 8; rating = 8;
} else if (card.equals("nine")) {
lowVal = 9; topVal = 9; rating = 9;
} else if (card.equals("ten")) {
lowVal = 10; topVal = 10; rating = 10;
} else if (card.equals("jack")) {
lowVal = 10; topVal = 10; rating = 11;
} else if (card.equals("queen")) {
lowVal = 10; topVal = 10; rating = 12;
} else if (card.equals("king")) {
lowVal = 10; topVal = 10; rating = 13;
} else if (card.equals("ace")) {
lowVal = 1; topVal = 11; rating = 14;
}
}
}
public static void main (String[] args) {
// keep this function call here
Scanner s = new Scanner(System.in);
Main c = new Main();
System.out.print(c.BlackjackHighest(s.nextLine()));
}
}
关于Java Blackjack 程序创建错误 : non-static variable this cannot be referenced from a static context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58532317/
我是 F# 的菜鸟,目前正在阅读 F# 3.0 中的专家。 它是我学习的第一种编译语言(我只知道用 R 编程) 在第 6 章第 117 页,我们没有太多仪式性地介绍 静态让和静态成员。我真的不明白它是
我很迷茫。我已经花几个小时广泛地复习了我的两个类(class)。没有什么是静态的,没有什么是静态引用的,但我无法摆脱这个错误。 A 类文件 (ClassA.php) privateVariable =
关于类公共(public)类声明,请看这两段代码: public class Helper { public static void CallMeganFox(string phoneNumb
我如何使用“super”关键字从父类(super class)(类“aa”)引用“a1” class aa { protected static int a1 = 2; } public class
class Perkusja { boolean talerze = true; boolean beben = true; void zagrajNaBebnie() { Sys
我试图在编译 C++ 程序时静态链接库。 g++ (GCC) 4.8.5 20150623(红帽 4.8.5-4) $ g++ -std=c++11 -I/home/jerry/Desktop/tin
$ javac TestFilter.java TestFilter.java:19: non-static variable this cannot be referenced from a sta
这个问题在这里已经有了答案: How do I create a global, mutable singleton? (7 个答案) How can you make a safe static
“覆盖”静态数组时我遇到了一个棘手的问题。我有静态数组(为简单起见),它们在不同的派生类中具有固定长度,但在编译时仍然知道所有大小。我在基类中也有一个虚函数,但我不知道如何解决在派生类中覆盖这些数组和
我刚刚在遗留代码中发现了这一点。我知道使用宏,每当使用名称时,它都会被宏的内容替换。它们最常用于为数字常量提供符号名称。我所知道的是预处理没有类型安全、范围的概念。 这样做的真正好处是什么? #def
将 Singleton 实例声明为 static 还是声明为 static final 更好? 请看下面的例子: 静态版本 public class Singleton { private s
问题: 我观察到的行为是 TypeScript 的预期行为吗? 我观察到的行为是 ECMAScript 6 的预期行为吗? 是否有一种简单的方法可以返回继承层次结构以处理每个级别的“myStatic”
在php中,访问类的方法/变量有两种方法: 1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/functi
我尝试向 ExpandoObject 添加一个动态方法,该方法会返回属性(动态添加)给它,但它总是给我错误。 我在这里做错了吗? using System; using System.Collecti
我试图获得一个静态链接到我的程序的音频库。我用 this灵活的包。为了让它运行,我必须按照描述构建 soloud 库 here .下载后不久,我在“build”文件夹中运行了“genie --with
这是我的webpack.prod.config.js代码 const path = require('path'); const { CleanWebpackPlugin } = require('c
我想知道什么时候应该对变量和(或)方法使用静态、最终、静态最终参数。据我了解: final:类似于c++中的const参数。它基本上意味着值(或在方法中 - 返回值)不会改变。 静态:这意味着值(或方
我一直在阅读有关使用静态对象作为锁的内容,最常见的示例如下: public class MyClass1 { private static final Object lock = new Obje
在 Visual Basic 2008 中,我知道有两种不同的方法可以完成同一件事: 成员(member)级别的 Dim: Dim counter1 as integer = 0 Dim counte
static public final int i = 0; public static final int i = 0; 两者都工作正常。 为什么同样的事情可以用两种不同的风格来完成? 最佳答案 因
我是一名优秀的程序员,十分优秀!