gpt4 book ai didi

java - Basic Java ArrayList : Gift List. 代码有效并显示所需的输出但我想了解更多?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:19 26 4
gpt4 key购买 nike

我是Java初学者,才刚刚开始自学数组和列表。以下是我为在线礼品登记练习想出的代码片段,虽然我理解其中的大部分内容,但有时我不得不反复试验,直到代码最终显示出我想要的输出。这里有几个问题:

System.out.println("Enter item: ");
gift.add(x.next());
System.out.println("Enter store: ");
store.add(x.next());

这是用户输入礼物时的代码以及他可以从中购买礼物的商店。我发现如果我输入由空格分隔的单词,输出将如下所示:

Do you wish to make a gift wish list? [Y/N]
Y
Enter item:
High heels
Enter store:
Any more items? [Y/N]

问题 #1:为什么会发生这种情况?我在代码的早期声明这是一个字符串(一个 ArrayList ,但是一个 <String> ),甚至当我将 Scanner 方法修改为 (x.nextLine()); 时也是如此我仍然会在控制台中打印出来。当用户输入一个单词的答案时,代码工作正常,但我仍然想知道为什么会发生这种情况,以及允许输入空格的可能替代方案是什么。

问题 #2:这部分代码,我不得不在互联网上查找。没有任何解释说明为什么这是必需的,但代码仍然有效。

for (int i = 0; i < gift.size(); i++) {
System.out.print(gift.get(i)+ " - ");
System.out.print(store.get(i));
System.out.println("");
}

在我找到这个之前,我最初是从 System.out.println("Gift List: \n" + gift + " - " + store); 开始的当显示用户输入的项目时,它们位于括号中并以逗号分隔。这段代码中 i 的值是多少,我们为什么要递增它?我还尝试更改 giftgift.size();store并且代码仍然可以正常工作。顺便问一下,这是为什么?我们只是选择要放置的变量还是要遵循特定的语法?

提前致谢。

编辑:这是完整的代码。

package arrays;

import java.util.ArrayList;
import java.util.Scanner;
public class GiftList {

public static void main(String[] args) {
Scanner x=new Scanner (System.in);

char ans;
ArrayList<String> gift= new ArrayList<String>();
ArrayList<String> store = new ArrayList<String>();

System.out.println("Do you wish to make a gift wish list? [Y/N]");
ans=x.next().toLowerCase().charAt(0);

while (ans!='n')

{
System.out.println("Enter item: ");
gift.add(x.nextLine());
System.out.println("Enter store: ");
store.add(x.nextLine());

System.out.println("Any more items? [Y/N]");
ans=x.next().toLowerCase().charAt(0);
}

System.out.println("Gift List: ");
for (int i = 0; i < gift.size(); i++) {
System.out.print(gift.get(i)+ " - ");
System.out.print(store.get(i));
System.out.println("");
}
}

}

最佳答案

问题一:

您跳过了项目列表,因为 x 仍然包含一个换行符,在添加您的项目之前调用 x.nextLine() 将解决这个问题:

while (ans!='n'){
x.nextLine(); //Skip the enter keypress
System.out.println("Enter item: ");
gift.add(x.nextLine());
System.out.println("Enter store: ");
store.add(x.nextLine());

修复循环后,添加带空格的礼物是可行的。

Do you wish to make a gift wish list? [Y/N]y

Enter item: high heels

Enter store: mine

Any more items? [Y/N] n Gift List: high heels - mine

问题 #2:这部分代码,我不得不在互联网上查找。没有任何解释说明为什么这是必需的,但代码仍然有效。

for (int i = 0; i < gift.size(); i++) {
System.out.print(gift.get(i)+ " - ");
System.out.print(store.get(i));
System.out.println("");
}

这是一个标准for环形。 i 充当列表中每个项目的计数器。 gift.size() 返回列表中项目数量的整数值,i++ 使用 i 的当前值,然后递增它在循环完成时。

因为 i 在循环的每次迭代中都会递增,因此调用 gift.get(i) 将返回存储在索引 i 处的值>。所以第一次迭代 i=0,第二次 i=1,第三次 i=2 等等。

至于为什么需要它 - 这不是唯一可行的方法,您可以做一些不同的事情来使其工作相同。尽管我个人觉得在这样的例子中循环的标准很容易理解。

这部分代码的关键是调用 store.get(i) 此调用获取与 gift.get() 相同的索引并将返回列表中的相同位置。

我不确定 store 和 gift 是什么关系,但看起来 HashMap可能是更好的 Collection 。 HashMap 是键值对的集合。

有时,以 K,V 关系而不是两个单独的集合来组织您的值更有意义。例如,使用 HashMap ,您将拥有商店->礼物关系,然后可以遍历显示值的集合。查看链接文档以获取一些使用示例。

然而,话虽这么说,最好还是等到 HashMap ,直到你读完书中的相关部分,否则你可能会对这些例子感到困惑。

我认为问题 1 需要更多信息才能正确解释为什么它没有按预期工作。能贴一下周边的代码吗?

关于java - Basic Java ArrayList : Gift List. 代码有效并显示所需的输出但我想了解更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com