如何将Arraylist作为参数传递给Java中的方法?

时间:2013-05-20 13:18:00

标签: java

我是Java的初学者。

* 编辑: *抱歉,伙计们。我意识到现在出了什么问题。我很感激你所有的好答案。与此同时,我非常抱歉浪费你宝贵的时间。问题现在解决了。

请注意,我已经编写了一行代码来获取下面的Arraylist“list1”,但是我避免在这里复制和粘贴它,因为这些代码很长

我有以下代码:

import java.util.*;
import java.util.regex.*;
import java.io.*;
  class ProDat{
     public static void main(String args[]) throws FileNotFoundException {                
             //obtain an Arraylist of String, named it "list1"
             produceFile(list1 , "filename.txt", "Column 1 \t\t Column 2\n");
       }

      //this method will take the Arraylist parameter and produce an output textfile
     public void produceFile(ArrayList<String> list, String str1 , String str2) {
    Collection<String> noDups_list = new HashSet<String> (list);
    try {
        File output = new File(str1);

        if(!output.exists())    {
        output.createNewFile();
        }

        BufferedWriter b1 = new BufferedWriter(new FileWriter(str1));
        b1.write(str2);

        for(String temp: noDups_list)   {
        b1.write(temp + "\t\t" + Collections.frequency(list, temp) +
            "\n");
        }
    } catch(IOException e)  {
        System.err.println("Error: " + e.get.Message());
    }
    }

}

我的问题是:每次我尝试编译它。我一直收到这个错误:非法开始表达 -     “public void produceFile(ArrayList list,String str1,String str2)”

请有人纠正我出了什么问题。

6 个答案:

答案 0 :(得分:2)

由于您使用static main方法拨打电话,请produceFile static方法:

public static void produceFile(..)

或以其他方式更改您的main方法以实例化ProDat实例,然后调用成员方法:

main(..)
{
ProDat obj = new ProDat();
obj.produceFile(..);
}

答案 1 :(得分:0)

已修改(错误代码)

public static void main(String args[]) throws FileNotFoundException {

   // edited here            
   ArrayList<String> list = new ArrayList<String>(Arrays.asList(args));
         produceFile(list1 , "filename.txt", "Column 1 \t\t Column 2\n");
   }

public static void produceFile //... etc note the "static" modifier

答案 2 :(得分:0)

静态方法只能调用静态方法

public static void produceFile((ArrayList list,String str1,String str2)

如果你想从静态方法调用非静态方法,请转到下面

ProDat proDat = new ProDat();

proDat.produceFile(list1 , "filename.txt", "Column 1 \t\t Column 2\n");

答案 3 :(得分:0)

你的班级有两个问题:

  1. 您的produceFile方法必须是静态的才能从main调用它。

    public static void produceFile(ArrayList<String> list, ...
    
  2. 您需要初始化list1变量:

    ArrayList<String> list1 = new ArrayList<String>();
    produceFile(list1, "filename.txt", "Column 1 \t\t Column 2\n");
    

答案 4 :(得分:0)

您的方法produceFile()应为static,因为您直接从main()方法调用它。 如果你以这种方式制作一个对象,然后调用你的方法,那么它不会给你任何错误。

public static void main(String arg[]){
class ProDat obj = new ProDat();
produceFile(a , "filename.txt", "Column 1 \t\t Column 2\n");
}

否则按照你的方式行事。

class ProDat{
     public static void main(String args[]) throws FileNotFoundException {
              ArrayList<String> list1 = new ArrayList<String>();
            //add elements or data in this list                  
           // e.g list.add("product");  
             produceFile(list1 , "filename.txt", "Column 1 \t\t Column 2\n");
       }

     public static void produceFile(ArrayList<String> list, String str1 , String str2) {
    Collection<String> noDups_list = new HashSet<String> (list);
    try {
        File output = new File(str1);

        if(!output.exists())    {
        output.createNewFile();
        }

        BufferedWriter b1 = new BufferedWriter(new FileWriter(str1));
        b1.write(str2);

        for(String temp: noDups_list)   {
        b1.write(temp + "\t\t" + Collections.frequency(list, temp) +
            "\n");
        }
    } catch(IOException e)  {
      //  System.err.println("Error: " + e.get.Message());
    }
    }

}

答案 5 :(得分:-1)

您需要在main方法中实例化ProDat对象并在其上调用produceFile()或使produceFile()方法保持静态。