- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是一个想学习Java的菜鸟。我正在阅读《Head First Java》一书,并且非常喜欢它。我在学习使用 ArrayList<>
时遇到了一个问题而不是常规的array[]
。我在尝试分配 int[]
时遇到异常到ArrayList<>
,请看下面的代码:
import java.util.ArrayList;
public class SimpleDotComGame {
public static void main(String[] args) {
int numOfGuesses = 0;
GameHelper helper = new GameHelper();
DotCom TheDotCom = new DotCom();
int randomNum = (int) (Math.random()*5);
int[] locations = {randomNum, randomNum+1, randomNum+2};
TheDotCom.setLocationCells(locations); <---- Here is the problem.
boolean isAlive = true;
while(isAlive == true) {
String guess = helper.getUserInput("enter a number");
String result = TheDotCom.checkYourself(guess);
numOfGuesses++;
if (result.equals("Kill")) {
isAlive = false;
System.out.println("You took " + numOfGuesses + " guesses, to"
+ "destroy the DotCom");
}
}
}
}
异常内容如下:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setLocationCells(ArrayList<String>) in the type DotCom is not applicable for the arguments (int[])
我尝试更改 int[] locations = {}
进入ArrayList<String>
查找此问题后,发现只有一个人询问过,使用以下代码:
ArrayList<String> locations = new ArrayList<String>();
String r1 = Integer.toString(randomNum);
String r2 = Integer.toString(randomNum+1);
String r3 = Integer.toString(randomNum+2);
locations.add(r1);
locations.add(r2);
locations.add(r3); ArrayList<String> locations = new ArrayList<String>;
这解决了异常,程序将运行,但在命令行中输入猜测不会返回“命中、未命中或杀死”值,并且我可以猜测任何数字。换句话说,战舰这个游戏不行。
供您引用,DotCom 类是:
import java.util.ArrayList;
public class DotCom {
private ArrayList<String> locationCells;
// private int numOfHits;
// don't need that now.
public void setLocationCells(ArrayList<String> loc) {
locationCells = loc;
}
public String checkYourself(String userInput) {
String result = "Miss";
int index = locationCells.indexOf(userInput);
if (index >= 0) {
locationCells.remove(index);
if (locationCells.isEmpty()) {
result = "Kill";
} else {
result = "Hit";
}
}
return result;
}
}
您能提供的任何建议都会很棒。我很紧张,在第 5 章中,我真的很难自己想出可用的代码行,但我希望这对于几乎没有经验的人来说是正常的?我还担心这个问题没有其他人问过!
最佳答案
看来你必须重写现有的方法 setLocationCells
新的,接受 int[] loc
。另外,最好隐藏locationCells
里面DotCom
将其修改排除在此类之外。
class DotCom {
private final List<String> locationCells = new ArrayList<>();
public void setLocationCells(List<String> loc) {
locationCells.clear();
if (loc != null)
locationCells.addAll(loc);
}
public void setLocationCells(int[] loc) {
locationCells.clear();
if(loc != null)
for(int val : loc)
locationCells.add(String.valueOf(val));
}
}
如果您无法修改DotCom
,那么你可以转换 int[]
进入ArrayList<String>
在客户端使用 Stream
:
TheDotCom.setLocationCells((ArrayList<String>)Arrays.stream(locations).boxed().map(String::valueOf).collect(Collectors.toList()));
附注在您的示例中,您甚至不必转换 int[]
进入ArrayList<String>
,因为您可以创建 ArrayList<String>
而不是int[]
,尤其是当您只有 3
时该数组中的值。
public static void main(String... args) throws IOException {
GameHelper helper = new GameHelper();
DotCom dotCom = new DotCom();
// create and add locations using random generator
int rnd = (int)(Math.random() * 5);
dotCom.setLocationCells(new ArrayList<>(Arrays.asList(String.valueOf(rnd), String.valueOf(rnd + 1), String.valueOf(rnd + 2))));
boolean alive = true;
int numOfGuesses = 0;
while (alive) {
String result = dotCom.checkYourself(helper.getUserInput("enter a number"));
numOfGuesses++;
if ("Kill".equals(result)) {
alive = false;
System.out.println("You took " + numOfGuesses + " guesses, to" + "destroy the DotCom");
}
}
}
关于java - Head First Java p.139 战舰 ArrayList<> 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50679726/
目前,我正在为网络开发类(class)做作业。 这些是说明:第一行和首字下沉样式Jakob 希望文章的第一行以小写大写字母显示。转到 First Line and Drop Cap Styles 部分
.first() 方法是在 jQuery 1.4 中添加的。 :first 选择器自 1.0 以来就已存在。 来自文档: :first The :first pseudo-class is equiv
我正在审查现有的 ASP.NET MVC (5.2.3) EF (6.1.3) 项目。 该项目使用 ASP.NET Identity,我检查了 web.config 中的 2 个连接字符串,一个用于
为什么人们使用 mid=first+(last-first)/2 而不是 (first+last)/2,在二进制搜索的情况下)两者有区别吗。如果有,请告诉我,因为我无法理解其中的区别。 最佳答案 如果
为什么人们使用 mid=first+(last-first)/2 而不是 (first+last)/2,在二进制搜索的情况下)两者有区别吗。如果有,请告诉我,因为我无法理解其中的区别。 最佳答案 如果
for(auto it = M.begin(); it!=M.end();it++) { coutfirstsecondsecond == 1) return it->firs
我试图从第二个循环中获取循环的第一项。 我知道我得到了这样的@key @../key 但@first 似乎不像@../first 那样工作 有什么想法吗? 问候 最佳答案 首先,无论是否在嵌套 blo
var tab1 = $('.tabs a:first-child').attr('href'); alert(tab1); .. 尽管同一页面上有两个 div.switch,但仅匹配一个。第二个位于
我想知道如何将节点*变量 NODE 分配给结构内的数据? struct node { int info; struct node *link; }; typedef struct nod
我有两个段落包含在一个 div 中。我想让第一段的文字变大一点,但使用 :first-child 并不能像我所说的那样工作。看不出有什么问题。
我有一个 ul li 列表 Parent child1 child2
我有三个表,即员工、部门和申诉。 Employees 表有超过一百万条记录。我需要找到员工的详细信息、他/她的部门以及他/她提出的申诉。 我可以想到以下两个查询来查找结果: 1。先过滤记录,只获取需要
我有三个表,即员工、部门和申诉。 Employees 表有超过一百万条记录。我需要找到员工的详细信息、他/她的部门以及他/她提出的申诉。 我可以想到以下两个查询来查找结果: 1。先过滤记录,只获取需要
这有什么区别吗: myList.Where(item => item == 0).First(); 还有这个: myList.First(item => item == 0); 后者对我来说更有意义,
我分不清 element:first-child 之间的区别和 element:first-of-type 例如,你有一个 div div:first-child → 全部 元素是其父元素的第一个子元
当我遇到一个奇怪的情况时,我正在研究 CSS 选择器。 如果我使用 :first-child 伪元素,我需要在它前面加上一个空格才能工作,否则它将无法工作。然而 :first-letter 伪元素的情
请考虑以下字符串数组: let strings = ["str1", "str2", "str10", "str20"] 假设需要获取包含 5 个字符的第一个元素 (String),我可以使用 fil
让我们假设我们要开始新项目 - 包含一些业务逻辑的应用程序、ASP.NET 上的用户界面、WPF 或两者。我们想使用 ORM 或 DAL 代码生成器并在 .NET 类中实现我们的业务逻辑。我们可以通过
我有一种树系统。我想做的是给所有 parent 一个 margin ,除了第一个。这是我的 HTML: Test
我分不清 element:first-child 之间的区别和 element:first-of-type 例如,你有一个 div div:first-child → 全部 元素是其父元素的第一个子元
我是一名优秀的程序员,十分优秀!