2013-09-07 4 views
2

У меня есть программа, где мне нужно, чтобы сохранить результаты в ArrayList: -Как сравнить с нулевым элементом в массиве в java?

public class ReseedingDBRandomElements { 

    public static void main(String[] args){ 

     try { 

      // getting the field Keyword from the csv 
      String csvfile="/Users/dray/Downloads/ReseedingDBRandomKeywords.csv"; 

      BufferedReader br =new BufferedReader(new FileReader(csvfile)); 
      StringTokenizer st = null; 
      String line=""; 
      int linenumber=0; 
      int columnnumber; 

      // initializing the parameter for each column 
      int free = 0; 
      int free1 = 0; 



      // create the ArrayList 

      ArrayList<String> Keyword = new ArrayList<String>(); 
      ArrayList<String> Alternate = new ArrayList<String>(); 


      // reading through the csv file 
      while((line=br.readLine())!=null){ 
       linenumber++; 
       columnnumber = 0; 

       st = new StringTokenizer(line,","); 
       while(st.hasMoreTokens()){ 
        columnnumber++; 
        String token = st.nextToken(); 
        if("Keyword".equals(token)){ 
         free=columnnumber; 
         System.out.println("The value of free :"+free); 
        }else if ("Alternate".equals(token)){ 
         free1=columnnumber; 
         System.out.println("The value of free1 :"+free1); 
        } 

        if(linenumber>1){ 

         if (columnnumber==free) 
         { 
          Keyword.add(token); 
         }else if (columnnumber==free1){ 
          Alternate.add(token); 
         } 
        } 
       } 
      } 

      // converting the keyword ArrayList to an array 
      String[] keyword = Keyword.toArray(new String[Keyword.size()]); 
      for(int i=0;i<keyword.length;i++){ 
       System.out.println(" The value of the keyword is :"+keyword[i]); 
      } 

      // converting the alternate ArrayList to an array 
      String[] alternate = Alternate.toArray(new String[Alternate.size()]); 
      for(int i=0;i<alternate.length;i++){ 
       System.out.println("The value of the alternate is :"+alternate[i]); 
      } 

      ArrayList<String> AlternateNew = new ArrayList<String>(); 


      for(int i=1;i<keyword.length;i++){ 
      if(keyword[i].equals(keyword[i-1])){ 
       AlternateNew.add(alternate[i-1]); 
      }else if(!(keyword[i]==(keyword[i-1]))){ 
       AlternateNew.add(alternate[i]); 
      } 
     } 


      String[] alternatenew = AlternateNew.toArray(new String[AlternateNew.size()]); 
      System.out.println("The length of the array is :"+alternatenew.length); 
      for(int i=0;i<alternatenew.length;i++){ 
       System.out.println("the value of the alternatenew :"+alternatenew[i]); 
      } 




     }catch (Exception e){ 
      System.out.println("there is an error :"+e); 
     } 

    } 
} 

Ниже приведен файл CSV

Keyword,Alternate 
ego kit,baby doll 
ego kit,garage park 
ego kit,random beats 
galaxy tab,venus 
galaxy tab,earth 
galaxy tab,sun 

То, что я пытаюсь сделать, это сравнить элементы и сохранить его в arraylist и отображать результаты, но когда последний элемент сравнивается, т.е. «галактическая вкладка» становится по сравнению с пустым полем после последней «закладки галактики», она не сохраняет предыдущий результат в arraylist, который является «солнцем»

Описание результатом является программа:

The value of the alternate is :baby doll 
The value of the alternate is :garage park 
The value of the alternate is :random beats 
The value of the alternate is :venus 
The value of the alternate is :earth 

Последний элемент не хранится в архиваторе.

Не понимаю, почему? Новое для программирования на Java.

+0

Ваш код может быть значительно сокращен и упрощен, если все, что вы хотите сделать, это прочитать 'String' после', 'в каждой строке. –

+0

Я просто попробовал вашу программу, и я думаю, что получаю ожидаемый результат, что заставляет меня думать, может быть, ваш входной файл не будет завершен должным образом (может быть, это не конец новой строки?). Попробуйте поместить 'System.out.println (" read line: "+ line") после 'readLine()' и убедитесь, что все ваши строки ввода читаются. Кроме того, это не сработает: 'keyword [i] == (keyword [i-1])'. Никогда не сравнивайте строки с '==', используйте 'keyword [i] .equals (ключевое слово [i-1])'. – ajb

+0

после того, как я не смог найти ошибку, я запускаю свой код на своем компьютере, и это сработало для меня, я получаю все 6 значений ... – JohnnyAW

ответ

1

В этом разделе есть несколько проблем, также присутствующие в течение

 AlternateNew.add(alternate[0]); 
     for(int i=1;i<keyword.length;i++){ 
      if(keyword[i]==(keyword[i-1])){ 
       AlternateNew.add(alternate[i]); 
      }else if(!(keyword[i]==(keyword[i-1]))){ 
       AlternateNew.add(alternate[i]); 
      } 
     } 
  1. соглашение об именах в Java, чтобы начать с строчной буквы для имени переменной (если она не является константой), поэтому объект AlternateNew подсвечивается так, как если бы это было имя класса.

  2. Блок else if проверяет противоположность того же состояния, что и его if. Вы можете прокомментировать if(!(keyword[i]==(keyword[i-1])), удалить или заменить его более читаемым комментарием комментария, и результат будет таким же.

  3. AlternateNew.add(alternate[i]); происходит независимо от этого условия, в любом отделении if, так как удалить if заявления полностью или исправить некоторую опечатку.

Что касается вашего фактического [править: оригинал] вопроса, я не могу найти что-то не так. Вы уверены, что не забыли сохранить файл csv? Я запустил его с помощью текстового файла и получил выход вопреки вашему сообщению!

+0

@ clwhisk: Я разместил новый код для ссылки для всех, что не дает мне желаемого ответа. – user2602860

+0

Пожалуйста, перепишите раздел, в котором вы заполняете AlternatNew. У вас все еще есть свернутая логика и сравнение строк с использованием ==. Подсказка: вам нужно только проверить одно условие в цикле и нужно только одну строку о добавлении. – clwhisk

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