在java中使用if时无限循环堆栈

时间:2014-10-26 06:26:45

标签: java while-loop infinite-loop

我有一个应该从导入的TXT读取的程序,并将每一行转换为基于“Art”或Jewellery的变量

文件导入工作正常,行列表也可正常工作。

问题是当我尝试将列表中的字符串与“ART”进行比较时,它将不匹配。 但棘手的是,我使用打印输出来打印字符串,它实际上给了我字符串“ART”!!

Scanner sc = new Scanner(importedFile);
while (sc.hasNextLine()) {
    stringList.add(sc.nextLine());   
}

// start from the third line of txt
int i = 2;

// stucked in infinity loop!!!!!
while (i < stringList.size()) {
    String type = stringList.get(i);
    System.out.println(type);
    System.out.println(stringList.size());

    if (type == "ART") {
        // add art consignment information
        consignmentName = stringList.get(i + 1);
        System.out.println("art");
        i=i+2;
        type = stringList.get(i + 2);
    } else if (type == "JEWELLERY") {
        //add JEWELLRY consignment
        consignmentName = stringList.get(i + 1);
        System.out.println("Jewellery");
        type = stringList.get(i + 2);
        i=i+2;
    }
}

txt文件是:

Walt Richman’s Estate Collection    
5    
ART    
Water Lilies    
JEWELLERY   
Diamond Solitaire in White Gold    

的输出
System.out.println(type);
System.out.println(stringList.size());

"ART" and "36"and it is in a infinity loop.

我在if循环中插入了一个“System.out.println(art)”,并且它没有打印,这意味着它永远不会进入它

所以我真的不知道什么时候

“System.out.println(type)”= ART,那么为什么if(type ==“ART”)不起作用

这真的很奇怪,有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

已发现问题:

<强> 1 即可。你没有增加变量i,所以虽然(i < stringList.size()) {永远不会是flase。        因此,您需要增加i变量

<强> 2 即可。 “问题是当我尝试将列表中的字符串与”ART“进行比较时,它将无法匹配。”        因为您需要使用equals()来比较两个不是==

的字符串

<强>为什么

  

<强> 1 即可。 等于()比较您正在寻找的内容

     

<强> 2 即可。 == 比较引用是否引用查看相同的位置

答案 1 :(得分:0)

您需要增加变量i。

答案 2 :(得分:0)

你永远不会增加我。因此我保持原始值,你的while循环永远运行...