字符串数组的元素无法与字符串进行比较

时间:2017-04-13 06:46:50

标签: java arrays string

我有一个简单的技术问题: 我试图阅读这个文件:

S,B,C,D,E,F
0,2,1,inf,inf,inf
inf,0,2,inf,inf,inf
inf,inf,0,4,5,inf
inf,1,inf,0,inf,5
inf,inf,inf,inf,0,1
inf,inf,inf,inf,inf,0

并将每个元素放在一些数组中:

BufferedReader br = null;
        FileReader fr = null;
        nodes = new ArrayList<Node>();
        edges = new ArrayList<Edge>();

        try 
        {
            fr = new FileReader(filePath);
            br = new BufferedReader(fr);    
            String firstLine = "";
            String line = "";
            String[] words = null;

            firstLine = br.readLine();
            words = firstLine.split(separtor);

            for (int i=0; i<words.length-1;i++)
            {
                nodes.add(new Node(i, words[i]));
            }

            int node = 0;

            while ((line = br.readLine()) != null)
            {
                words = line.split(separtor);

                for (int i=0; i<words.length-1;i++)
                {
                    if (!words[i].equals("inf") || !words[i].equals("0"))
                    {
                        edges.add(new Edge(nodes.get(node), nodes.get(i), Integer.parseInt(words[i])));
                    }
                }
                node++;
            }
        }
        catch (IOException e)
        {

            e.printStackTrace();

        } 

问题出现在这一行: if(!words [i] .equals(&#34; inf&#34;)||!words [i] .equals(&#34; 0&#34;))

当字符串不是&#34; inf&#34;或&#34; 0&#34;然后你开始添加东西但是当我实际运行时,它仍然添加&#34; 0&#34;和&#34; inf&#34;导致错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "inf"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)

我做了一些测试,但我仍然无法理解为什么我的病情不起作用。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您必须将or替换为and

 if (!words[i].equals("inf") && !words[i].equals("0"))

使用or,您始终会进入该区块,因为words[i]始终不等于&#34; inf&#34;或&#34; 0&#34;。 在你的循环中你的状况是错误的。替换

for (int i=0; i<words.length-1;i++)

通过

for (int i=0; i<words.length;i++)

否则你会错过每一行的最后一个元素。

编辑: 你还必须改变其他循环中的条件

   for (int i=0; i<words.length-1;i++)
            {
                nodes.add(new Node(i, words[i]));
            }

   for (int i=0; i<words.length;i++)
            {
                nodes.add(new Node(i, words[i]));
            }