2

我有一个程序需要将结果存储在数组列表中:-

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 中的前一个结果是“sun”

以下是程序的结果:

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 编程新手。

4

1 回答 1

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语句,要么修复一些错字。

至于您的实际 [edit: original] 问题,我找不到任何问题。你确定你没有忘记保存 csv 文件吗?我使用文本文件运行它并得到与您的帖子相反的输出!

于 2013-09-07T01:16:09.767 回答