Java 如何使用扫描仪浏览ArrayList并找到ArrayList中的内容?

Java 如何使用扫描仪浏览ArrayList并找到ArrayList中的内容?,java,arraylist,Java,Arraylist,我正在制作一个汽车的ArrayList,我在如何迭代ArrayList并使用扫描仪打印我所要求的内容时遇到了问题。 示例:我正在列表中查找一辆奥迪,我希望它查看ArrayList,如果它在ArrayList中,请打印“我们有一辆%s。” 这就是我到目前为止所做的: 公共班机{ public static void main(String[] args) { ArrayList<String> car = new ArrayList<>(); car.add

我正在制作一个汽车的ArrayList,我在如何迭代ArrayList并使用扫描仪打印我所要求的内容时遇到了问题。 示例:我正在列表中查找一辆奥迪,我希望它查看ArrayList,如果它在ArrayList中,请打印“我们有一辆%s。”

这就是我到目前为止所做的: 公共班机{

public static void main(String[] args) {
    ArrayList<String> car = new ArrayList<>();
    car.add("Audi");
    car.add("Chevrolet");
    car.add("Dodge");
    car.add("Ford");
    car.add("Honda");
    car.add("Toyota");
    car.add("Volkswagen");

    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();

    for(String name: car)
    {
        if(name == sc){
            System.out.printf("We have a %s.", sc);
        }
    }
}    
publicstaticvoidmain(字符串[]args){
ArrayList car=新的ArrayList();
汽车。添加(“奥迪”);
汽车。添加(“雪佛兰”);
添加(“道奇”);
汽车。添加(“福特”);
加上(“本田”);
加上(“丰田”);
汽车。添加(“大众”);
扫描仪sc=新的扫描仪(System.in);
字符串str=sc.nextLine();
for(字符串名称:car)
{
if(name==sc){
System.out.printf(“我们有一个%s.”,sc);
}
}
}    

}我认为这里真正的问题是你对
扫描仪的功能没有清晰的理解

扫描器
从流中读取字符(例如
System.in
),并将其转换为各种值;e、 整数、浮点数、字符串等。基本模式是:

  • 调用
    hasNextXXX
    测试是否有
    XXX
    可读取
  • 调用
    nextXXX
    读取
    XXX
因此,您正试图从
扫描仪
获取汽车制造商的名称。假设汽车制造商的名称中没有空格,您正在读取的是一个以空格分隔的标记。读取令牌的方法是
Scanner::next
。它以
字符串
的形式返回标记,并删除任何前导或尾随空格

旁白:
String::nextLine
也可以使用,只是它返回完整的一行,其中包含用户在名称2之前或之后输入的所有空格。如果用户输入(例如)
Ford
,后面有空格,则该空格与
car
列表中的值不匹配。要解决这一问题,您需要执行以下操作:

    String str = sc.nextLine().trim();  // 'trim' removes leading and 
                                        // trailing whitespace; e.g. SP,
                                        // TAB, CR and NL characters.
一旦将名称设置为
字符串
,就应该
String::equals
将其与其他字符串进行比较。在几乎所有情况下,使用
==
比较字符串都是不正确的;看

为了更深入地理解
扫描仪
,我建议您花点时间阅读


您的代码不执行上述操作。相反,它读取一行(即
str=sc.nextLine()
)而不使用它。然后它使用
=
测试
扫描器
是否与列表中的每个
字符串
相等。这失败了,因为
扫描仪
不是
字符串

旁白:在Java中,引用类型(即对象)的
==
表示“这是同一个对象吗?”


1-另一种可能是您没有足够仔细地阅读编写的代码


2-。。。除了行分隔符序列之外;i、 e.CR、NL或CR+NL。这将由下一行自动删除:有关详细信息,请参阅javadocs。

这是否回答了您的问题?字符串不能等于扫描仪。它可以等于您用扫描仪读取的字符串。提示:列表有一个contains()方法。
如果(name==sc){
,则不是,您试图将字符串等同于扫描对象,因此这在逻辑上或编码上没有意义。您可以使用扫描程序从文件或用户中提取字符串,然后使用该字符串执行操作。谢谢大家的帮助。我是java新手lol