Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编写一个简单的文本游戏。如何显示拾取的项目_Java - Fatal编程技术网

用java编写一个简单的文本游戏。如何显示拾取的项目

用java编写一个简单的文本游戏。如何显示拾取的项目,java,Java,我试图编写(“没错,您带来了:“+threeItems”)部分,以便它指定每个项,而不仅仅是变量“threeItems”中输入内容的副本 System.out.println("What items did you bring with again? (pick 3)"); System.out.println("(Crowbar, pistol, knife, key, flask, dynamite, flint, quill & parchment, devilishly good

我试图编写(“没错,您带来了:“+threeItems”)部分,以便它指定每个项,而不仅仅是变量“threeItems”中输入内容的副本

System.out.println("What items did you bring with again? (pick 3)");
System.out.println("(Crowbar, pistol, knife, key, flask, dynamite, flint, quill & parchment, devilishly good looks");
String threeItems = s.nextLine();
此时,我想显示用户选择的三个项目,而不直接打印用户编写的内容。我想做一个
if
else
语句,但是项目的数量会导致代码的那部分变得非常嵌套,这是我不想要的

System.out.println("That's right, you brought: " + threeItems);

谢谢大家在这方面的帮助!stackoverflow是一个伟大的社区,我很高兴成为其中的一员

您可以使用映射来构造项目,其中键是应用程序指定的项目名称和值一个简单的布尔值,它将项目标记为您的角色所拥有。当用户输入与地图中的项目匹配时,可以设置布尔标志

使用此数据结构,您只需在映射中进行迭代,并将“拥有”的任何项目名称添加到
threeItems
输出变量中

如何进行映射取决于您自己。您的代码目前似乎建议用户在一行中输入以逗号分隔的项目列表,然后单击enter。这可以工作,但容易出错,您必须解析输入

我建议使用一个循环,要求用户每次输入一个项目名称,并提供退出循环的方法

跟进@Krzysztof回复下面的评论:我不知道你需要保持所选列表的有序。如果您坚持使用地图,那么您可以使用整数而不是布尔值,其中任何非零值都表示物品处于占有状态,并且该值将是物品的顺序。此解决方案的问题是,虽然在早期场景中地图很有用,但现在却成为了一个障碍

现在,我建议不要使用地图,而是使用列表,或者更确切地说,使用ArrayList。其他人建议使用列表和数组,但我将以更具Java风格的方式推荐它们:


创建一个
静态最终ArrayList
,并在构造函数或初始化块中用项对象(实际上只是项名称)填充它。(.)为最初为空的物品创建类似的ArrayList。在用户输入项目库存时填充列表。列表中+1项的索引是它的占有位置。不要在第一、第二、第三等场合显得可爱。使用亲吻:第1项:。。。项目2:。。。等等。

这方面有许多可能的选择,这实际上取决于您希望如何处理数据

项目可以是一个,然后使用类似于的东西来跟踪库存中的内容

您可以将项目存储在字符串数组中。或字符串的集合(ArrayList或LinkedList),或字符串的集合(HashSet、TreeSet)

您可以让每个项目都有自己的类和对象。用于指定库存中的项目,然后指定注释(但这是一个实现细节)。然后你可以把动词放在项目上


这些选项实际上是无限的,在很大程度上取决于您希望程序如何处理项目和库存。为此,您确实需要进一步思考问题和游戏设计。

这取决于用户输入信息的方式。如果他们输入“刀,手枪,钥匙”,你会理解为不同于“刀,手枪钥匙”

如果您想这样做,请考虑使用
split
功能。所以,如果你想第一次分开,它会是这样的:

System.out.print("First Item: ");
String first = s.next();
System.out.println();
System.out.print("Second Item: ");
String first = s.next();
System.out.println();
System.out.print("Third Item: ");
String first = s.next();
System.out.println();
String[]items=threeItems.split(“,”)

其中,
items[0]
=“刀”,他们写的第一件事,
items[1]
等于“手枪”,等等

但是,最好澄清用户应该如何输入,这样您就不需要处理用户可能如何格式化其输入的大量边缘情况。每个项目都可以有一个新行,如下所示:

System.out.print("First Item: ");
String first = s.next();
System.out.println();
System.out.print("Second Item: ");
String first = s.next();
System.out.println();
System.out.print("Third Item: ");
String first = s.next();
System.out.println();

用户在每一行输入一个项目,现在他们的输入包含在三个独立的变量中。这减少了用户输入信息方式的可变性,并允许进行更干净、更不容易出错的游戏。

1)您的意思是:
它指定了每个项目,而不仅仅是变量'threeItems'中输入内容的副本。
2)如果您不想要嵌套的
If
s那么您可以使用
开关
这个问题非常开放。除了将项目打印回屏幕之外,您还想做什么?您的意思是,用户输入一些文本,您检查他/她键入的内容,并将其与您的项目列表相匹配,然后显示从列表中选择的项目??是的,darzen,很抱歉如此开放。我想不出怎么解释它。我希望能够验证这3个项目是否是您可以选择的项目,而不仅仅是任何答案。如果我要使用hashmap并为每个项目分配一个参考号,我将如何在while循环中编写代码,以便它检查hashmap中的每个值,如果该值包含在hashmap中,它将请求第2个项目、第3个项目,然后关闭?顺便说一下,谢谢你的回答!我对java还是个新手(很明显),并且试图从互联网上学习@嗯。我没意识到你需要保持所选列表的有序。如果您坚持使用地图,那么您可以使用整数而不是布尔值,其中任何非零值都表示物品处于占有状态,并且该值将是物品的顺序。此解决方案的问题是,虽然在早期场景中地图很有用,但现在却成为了一个障碍。更新我的答案…谢谢你的回复!我还没有学会分割功能,但是让用户一次输入一个项目比让他们一次输入所有项目更有意义!