2014-12-18 4 views
-1

Я работаю над программой, которая поможет мне отсортировать по регионам, которые отвечают требованиям на веб-сайте NationStates. Это мой первый раз, используя любой внешний API или XML. Я столкнулся с проблемой, когда два определенных оператора if в строках 87 (if (tag == "Password") {) и 91 (} else if (tag == "Minuscule") {) пропускаются, даже если выполнены условия. Я использую eclipse, и я пропустил код в режиме отладки с точками останова в этих строках. Пожалуйста, помогите мне!Моя программа продолжает пропускать оператор if, хотя условия выполнены.

import java.io.InputStream; 
import java.net.URL; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

public class Main { 

public static void main(final String argv[]) { 

    final String[] regionsarray = new String[5000]; 
    int arraylength = 0; 

    try { 

     final URL url = new URL("https://www.nationstates.net/cgi-bin/api.cgi?region=the_black_riders&q=embassies"); 
     final InputStream stream = url.openStream(); 
     final DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     final DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     final Document doc = dBuilder.parse(stream); 

     doc.getDocumentElement().normalize(); 

     final NodeList nList = doc.getElementsByTagName("EMBASSIES"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 

      final Node nNode = nList.item(temp); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

       final Element eElement = (Element) nNode; 

       for (int temp2 = 0; temp2 < 5000; temp2++) 
        try { 
         final String region = eElement.getElementsByTagName("EMBASSY").item(temp2).getTextContent(); 
         regionsarray[arraylength] = ""; 
         for (int temp3 = 0; temp3 < region.length(); temp3++) 
          if (region.charAt(temp3) == ' ') 
           regionsarray[arraylength] = regionsarray[arraylength] + '_'; 
          else 
           regionsarray[arraylength] = regionsarray[arraylength] + region.charAt(temp3); 
         regionsarray[arraylength] = regionsarray[arraylength].toLowerCase(); 
         System.out.println("Found " + regionsarray[arraylength] + "."); 
         arraylength++; 
        } catch (final NullPointerException e) { 
         System.out.println("END OF EMBASSY TESTING"); 
         System.out.println(); 
         temp2 = 5000; 
        } 
      } 
     } 
     try { 
      Thread.sleep(600); 
     } catch (final InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 

     for (int temp = 0; temp < arraylength; temp++) { 
      boolean issuitable = true; 
      final URL regionurl = new URL("https://www.nationstates.net/cgi-bin/api.cgi?region=" + regionsarray[temp] + "&q=tags"); 
      final InputStream regionstream = regionurl.openStream(); 
      final Document regiondoc = dBuilder.parse(regionstream); 

      regiondoc.getDocumentElement().normalize(); 

      final NodeList regionnList = regiondoc.getElementsByTagName("TAGS"); 

      for (int temp2 = 0; temp2 < regionnList.getLength(); temp2++) { 

       final Node regionnNode = regionnList.item(temp2); 

       if (regionnNode.getNodeType() == Node.ELEMENT_NODE) { 

        final Element regioneElement = (Element) regionnNode; 

        for (int temp3 = 0; temp3 < 150; temp3++) 
         try { 
          final String tag = regioneElement.getElementsByTagName("TAG").item(temp3).getTextContent(); 
          if (tag == "Password") { 
           issuitable = false; 
           System.out.println(regionsarray[temp] + " disqualified because it is password protected."); 
           temp3 = 150; 
          } else if (tag == "Minuscule") { 
           issuitable = false; 
           System.out.println(regionsarray[temp] + " disqualified because it is too small."); 
           temp3 = 150; 
          } 
         } catch (final NullPointerException e) { 
          temp3 = 150; 
         } 

       } 
      } 
      if (issuitable) 
       System.out.println(regionsarray[temp] + " passed tag testing."); 
      try { 
       Thread.sleep(600); 
      } catch (final InterruptedException ex) { 
       Thread.currentThread().interrupt(); 
      } 
     } 
     System.out.println("END OF TAG TESTING"); 
     System.out.println(); 

    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

http://stackoverflow.com/questions/513832/how-do-i-compare -strings-in-java –

+0

Никогда не кодируйте методы так долго! Это против хорошего программирования! И вы можете отлаживать его, поэтому поймите, какая строка является результатом ошибки и свести к минимуму ваш вопрос! –

+0

@AmirPashazadeh Спасибо за _ ** конструктивную ** _ критику ... Также в следующий раз прочитайте, прежде чем давать кому-то язык. Я четко заявил, какие строки вызывают проблему, и что я отлаживал ее. – user2949243

ответ

4

Всегда используйте .equals() из строки для сравнения двух строк на равенство, на вашей линии 87

if(tag == "Password") 

изменить это на

if(tag.equals("Password")) 

== только проверяет равенство ссылок и две строки с одинаковым значением не обязательно должны быть равными по ссылке, например: -

String s1=new String("hello"); 
String s2=new String("hello"); 
System.out.println(s1); //prints hello 
System.out.println(s2); //prints hello 
System.out.println(s1==s2); //prints false 
+0

Работает сейчас. Спасибо за помощь! Я знаю только самые основы java на данный момент, и вся помощь, которую я могу получить, велика. – user2949243

1

использование .equals() вместо == оператора

.equals сравнивает фактические данные в пределах объектов, в то время как при использовании == вы сравниваете ссылки на объект, а не фактические данные.

Проверьте этот код:

String s=new String("Java"); 
String s1=new String("Java"); 
System.out.println(s==s1) // prints false as s and s1 points to different objects 

где, как s.equals(s1) возвращает истину, поскольку он сравнивает данные в пределах объектов

Смежные вопросы