如何编写具有ArrayList和int作为参数并返回ArrayList

时间:2019-07-14 16:23:40

标签: java arraylist methods

在编写采用数组列表和整数作为输入的方法的标头时,会遇到多个错误。

我尝试了几种不同的方法来编写方法的标题。主体很好,可以给我我想要的东西,但是我不能得到标题/调用名称(我不知道您称方法的第一行)不会抛出错误

       /**
         *  Creates Arraylist "list" using prompt user for the input and output file path and sets the file name for the output file to 
         *  p01-runs.txt
         *  
         */
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter the path to your source file: ");
        String inPath = scan.nextLine(); // sets inPath to user supplied path
        System.out.println("Please enter the path for your source file: ");
        String outPath = scan.nextLine() + "p01-runs.txt"; // sets outPath to user supplied input path

        ArrayList<Integer> listRunCount = new ArrayList<Integer>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        /**
         *  Reads data from input file and populates array with integers.
         */
        FileReader fileReader = new FileReader(inPath);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        // file writing buffer
        PrintWriter printWriter = new PrintWriter(outPath);

        System.out.println("Reading file...");

        /**
         * Reads lines from the file, removes spaces in the line converts the string to
         * an integer and adds the integer to the array
         */
        File file = new File(inPath); 
        Scanner in = new Scanner(file); 
        String temp=null;

        while (in.hasNextLine()) {
            temp = in.nextLine();
            temp = temp.replaceAll("\\s","");
            int num = Integer.parseInt(temp);
            list.add(num);
        }
            listRunCount.findRuns(list, RUN_UP);



//********************************************************************************************************          

        public ArrayList<Integer> findRuns(ArrayList<Integer> list, int RUN_UP){

            returns listRunCount;
        }

错误消息

Multiple markers at this line
    - Syntax error on token "int", delete this token
    - Syntax error, insert ";" to complete LocalVariableDeclarationStatement
    - Integer cannot be resolved to a variable
    - ArrayList cannot be resolved to a variable
    - Syntax error, insert ";" to complete LocalVariableDeclarationStatement
    - Illegal modifier for parameter findRuns; only final is permitted
    - Syntax error, insert ") Expression" to complete CastExpression
    - Syntax error on token "findRuns", = expected after this token
    - Syntax error, insert "VariableDeclarators" to complete 
     LocalVariableDeclaration
    - Syntax error, insert ";" to complete Statement

1 个答案:

答案 0 :(得分:0)

这类事情消除了对静电的需求。如果您从静态方法 main()中运行代码,则所有在main()内部调用或引用的类方法,成员变量等也必须声明为 static 。通过执行:

public class Main {

    public static void main(String[] args) { 
        new Main().run(); 
    }

}

消除了对静态的需要。我认为要正确执行此操作,还应将args []参数传递给类中的 run()方法:

public class Main {

    public static void main(String[] args) { 
        new Main().run(args); 
    }

    private void run(String[] args) {
        // You project code here
    }

}

这样,也可以从 run()方法中处理传递给应用程序的任何命令行参数。您会发现大多数人不会将方法名称 run 用于此类事情,因为 run()是与线程的运行更相关的方法名称。像 startApp()这样的名称更合适。

public class Main {

    public static void main(String[] args) { 
        new Main().startApp(args); 
    }

    private void startApp(String[] args) {
        // You project code here
    }

}

牢记所有这些,您的代码可能看起来像这样:

public class Main {

    public static void main(String[] args) { 
        new Main().run(args); 
    }

    private void run(String[] args) {
        String runCountFileCreated = createListRunCount();
        if (!runCountFileCreated.equals("") {
            System.out.println(The count file created was: " + runCountFileCreated);
        }
        else {
            System.out.println(A count file was NOT created!);
        }
    }

     /**
     * Creates an ArrayList "list" using prompts for the input and output file
     * paths and sets the file name for the output (destination) file to an
     * incremental format of p01-runs.txt, p02-runs.txt, p03-runs.txt, etc. If
     * p01 exists then the file name is incremented to p02, etc. The file name
     * is incremented until it is determined that the file name does not exist.
     *
     * @return (String) The path and file name of the generated destination
     *         file.
     */
    public String createListRunCount() {
        String ls = System.lineSeparator();
        File file = null;

        Scanner scan = new Scanner(System.in);
        // Get the source file path from User...
        String sourceFile = "";
        while (sourceFile.equals("")) {
            System.out.print("Please enter the path to your source file." + ls
                    + "Enter nothing to cancel this process:" + ls
                    + "Source File Path: --> ");
            sourceFile = scan.nextLine().trim(); // User Input
            /* If nothing was entered (just the enter key was hit) 
                   then exit this method. */
            if (sourceFile.equals("")) {
                System.out.println("Process CANCELED!");
                return "";
            }
            // See if the supplied file exists...
            file = new File(sourceFile);
            if (!file.exists()) {
                System.out.println("The supplied file Path/Name can not be found!." + ls
                        + "[" + sourceFile + "]" + ls + "Please try again...");
                sourceFile = "";
            }
        }

        String destinationFile = "";
        while (destinationFile.equals("")) {
            System.out.print(ls + "Please enter the path to folder where data will be saved." + ls
                    + "If the supplied folder path does not exist then an attempt" + ls 
                    + "will be made to automatically created it. DO NOT supply a" + ls
                    + "file name. Enter nothing to cancel this process:" + ls
                    + "Destination Folder Path: --> ");
            String destinationPath = scan.nextLine();
            if (destinationPath.equals("")) {
                System.out.println("Process CANCELED!");
                return "";
            }
            // Does supplied path exist. If not then create it...
            File fldr = new File(destinationPath);
            if (fldr.exists() && fldr.isDirectory()) {
                /* Supplied folder exists. Now establish a new incremental file name.
                   Get the list of files already contained within this folder that 
                   start with p and a number (ex: p01-..., p02--..., p03--..., etc)
                 */
                String[] files = fldr.list();   // Get a list of files in the supplied folder.
                // Are there any files in the supplied folder?
                if (files.length > 0) {
                    //Yes, so process them...
                    List<String> pFiles = new ArrayList<>();
                    for (String fileNameString : files) {
                        if (fileNameString.matches("^p\\d+\\-runs\\.txt$")) {
                            pFiles.add(fileNameString);
                        }
                    }
                    // Get the largest p file increment number
                    int largestPnumber = 0;
                    for (int i = 0; i < pFiles.size(); i++) {
                        int fileNumber = Integer.parseInt(pFiles.get(i).split("-")[0].replace("p", ""));
                        if (fileNumber > largestPnumber) {
                            largestPnumber = fileNumber;
                        }
                    }
                    largestPnumber++;  // Increment the largest p file number by 1
                    // Create the new file name...
                    String fileName = String.format("p%02d-runs.txt", largestPnumber);
                    //Create the new destination File path and name string
                    destinationFile = fldr.getAbsolutePath() + "\\" + fileName;
                }
                else {
                    // No, so let's start with p01-runs.txt
                    destinationFile = fldr.getAbsolutePath() + "\\p01-runs.txt";
                }
            }
            else {
                // Supplied folder does not exist so create it.
                // User Confirmation of folder creation...
                JFrame iFrame = new JFrame();
                iFrame.setAlwaysOnTop(true);
                iFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                iFrame.setLocationRelativeTo(null);
                int res = JOptionPane.showConfirmDialog(iFrame, "The supplied storage folder does not exist!"
                        + ls + "Do you want to create it?", "Create Folder?", JOptionPane.YES_NO_OPTION);
                iFrame.dispose();
                if (res != 0) {
                    destinationFile = "";
                    continue;
                }
                try {
                    fldr.mkdirs();
                }
                catch (Exception ex) {
                    // Error in folder creation...
                    System.out.println(ls + "createListRunCount() Method Error! Unable to create path!" + ls
                            + "[" + fldr.getAbsolutePath() + "]" + ls + "Please try again..." + ls);
                    destinationFile = "";
                    continue;
                }
                destinationFile = fldr.getAbsolutePath() + "\\p01-runs.txt";
            }
        }

        ArrayList<Integer> list = new ArrayList<>();

        /* Prepare for writing to the destination file.
           Try With Resourses is use here to auto-close 
           the writer.    */
        try (PrintWriter printWriter = new PrintWriter(destinationFile)) {
            System.out.println(ls + "Reading file...");

            /**
             * Reads lines from the file, removes spaces in the line converts
             * the string to an integer and adds the integer to the List.
             */
            String temp = null;
            /* Prepare for writing to the destination file.
               Try With Resourses is use here to auto-close 
               the reader.    */
            try (Scanner reader = new Scanner(file)) {
                while (reader.hasNextLine()) {
                    temp = reader.nextLine().replaceAll("\\s+", "");
                    /* Make sure the line isn't blank and that the 
                       line actually contains no alpha characters.
                       The regular expression: "\\d+" is used for
                       this with the String#matches() method.    */
                    if (temp.equals("") || !temp.matches("\\d+")) {
                        continue;
                    }
                    int num = Integer.parseInt(temp);
                    list.add(num);
                }

                // PLACE YOUR WRITER PROCESSING CODE HERE
            }
            catch (FileNotFoundException ex) {
                Logger.getLogger("createListRunCount() Method Error!").log(Level.SEVERE, null, ex);
            }
        }
        catch (FileNotFoundException ex) {
            Logger.getLogger("createListRunCount() Method Error!").log(Level.SEVERE, null, ex);
        }

        /* return the path and file name of the 
           destination file auto-created.    */
        return destinationFile; 
    }

}