如果条件不在String上

时间:2014-12-11 21:57:19

标签: java

好的,这很难解释,但我会尽我所能。

我正在创建一个从.data文件中读取的程序,将文件的每一行保存到一个数组列表中,然后用户指定要查找的建筑物和房间号,然后程序搜索整个用于匹配的数组列表(几千行),然后使用这些匹配计算使用从数据文件获得的一些数据来使用这些房间的频率。

现在,问题是我可以通过数组列表进行搜索,但似乎做错了。

String buildingNum = jTextField2.getText();
String roomNum = jTextField1.getText();

int strDuration = 0;
int totalDuration = 0;
int meetings = 0;

for (int x = 0; x < Global.globalLength; x++) {
    if ((buildingNum != "XXXX") && (list.get(x).building != "XXXX") && (list.get(x).room != "XXXX") && (roomNum != "XXXX")) {
        int intBuildingNum = Integer.parseInt(buildingNum);
        int intRoomNum = Integer.parseInt(roomNum);
        int listBuildingNum = Integer.parseInt(list.get(x).building);
        int listRoomNum = Integer.parseInt(list.get(x).room);
        if (listBuildingNum == intBuildingNum) {
            System.out.println("Second STEP WOO");
            if (listRoomNum == intRoomNum) {
                strDuration = Integer.parseInt(list.get(x).duration);
                meetings = list.get(x).days.length();
                totalDuration = totalDuration + (meetings * strDuration);
                System.out.println(strDuration + " and " + meetings);
                System.out.println(" and " + totalDuration);
            }
        }
    }
}

int utilization = totalDuration / 50;
jTextArea1.setText("The room utilization is: " + utilization);

在数据文件中,出于某种原因,有几个地方输入数据XXXXXXXXXXXX。因此,当试图将所述数据转换为整数时,存在问题(出于显而易见的原因)。所以为了解决这个问题,我在if循环之后立即进行了奇怪的for阻止,以便程序尽量不这样做。
但是,在运行它时,我能够让程序在出现错误之前显示总持续时间几次

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "XXXX"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

我认为我已经解决了这个问题。任何人都可以看到为什么它仍然会尝试将XXXX转换为整数?

3 个答案:

答案 0 :(得分:1)

您在字符串上使用==运算符:

if ((buildingNum != "XXXX") && (list.get(x).building != "XXXX") && (list.get(x).room != "XXXX") && (roomNum != "XXXX")) 
在Strings上使用的

==运算符比较每个字符串的引用,因为它们是对象。 在编写myString == "aString"时,您创建一个包含“aString”的 new String对象。因为它是一个新对象,所以它不可能引用myString引用的相同String对象。条件始终为false

要比较2个字符串,您必须使用 String#equals()String#equalsIgnoreCase()

答案 1 :(得分:0)

您转换持续时间:

strDuration = Integer.parseInt(list.get(x).duration);

没有进行健全性检查。

答案 2 :(得分:0)

另一种选择,你可以在语句周围放置一个try / catch来寻找NumberFormatException,而不是进行所有的条件检查。