簡體   English   中英

如何將程序重置為主字符串args?

[英]how to reset program to main string args?

我正在編寫程序,如果它捕獲到異常,無論如何我想重設整個程序,請告訴我我真的需要今晚完成它嗎?

public static void readinfile(ArrayList<ArrayList> table,
            int numberOfColumns,ArrayList<String> header, 
            ArrayList<ArrayList<String>> original,
            ArrayList<String> sntypes, ArrayList<Integer> displaySize, 
            ArrayList<String> writeOut, Scanner inputStream) {
        //System.out.print("enter data file: ");
        Scanner keyboard = new Scanner(System.in);
        System.out.print("enter data file: ");
        String fileName = keyboard.nextLine();
        try {
            System.out.println("try " + fileName);
            inputStream = new Scanner(new FileInputStream(fileName));
            System.out.println(inputStream);
        } catch (FileNotFoundException E) {
            System.out.println("Error in opening file ");
            //readinfile(table, numberOfColumns, header,
            //original, sntypes,displaySize, writeOut, inputStream );
        }
        // file is now open and input scanner attached
        if (inputStream.hasNextLine()) {
            String Line = inputStream.nextLine();
            Scanner lineparse = new Scanner(Line);
            lineparse.useDelimiter(",");
            ArrayList<String> rowOne = new ArrayList<String>();
            while (lineparse.hasNext()) {
                String temp = lineparse.next();
                String originaltemp = temp;
                writeOut.add(temp);
                temp = temp + "(" + (++numberOfColumns) + ")";
                displaySize.add(temp.length());
                // row.add(lineparse.next());
                if (temp.trim().substring(0, 2).equalsIgnoreCase("S ")
                        || temp.trim().substring(0, 2).equalsIgnoreCase("N ")) {
                    rowOne.add(originaltemp);
                    header.add(temp.substring(2));
                    sntypes.add(temp.toUpperCase().substring(0, 2).trim());
                } else {
                    System.out.println("Invalid file please enter a new file: ");
//readinfile(table, numberOfColumns, header, original, sntypes,displaySize,writeOut,Name);                  
                    readinfile(table, numberOfColumns, header,
                            original, sntypes, displaySize, writeOut, inputStream);
                }
            }
            // add table here it gives problem later on...
            original.add(rowOne);
        }

        while (inputStream.hasNextLine()) {
            String Line = inputStream.nextLine();
            Scanner lineparse = new Scanner(Line);
            lineparse.useDelimiter(",");
            ArrayList row = new ArrayList();
            int j = 0;
            while (lineparse.hasNextLine()) {
                String temp = lineparse.next().trim();
                int sizeOfrow = temp.trim().length();
                if (sizeOfrow > displaySize.get(j)) {
                    displaySize.set(j, sizeOfrow);
                }
                if (j < numberOfColumns && sntypes.get(j).equalsIgnoreCase("N")) {
                    try {
                        if (temp.equalsIgnoreCase("")) {
                            row.add(new Double(0.0));
                        } else {
                            row.add(new Double(temp.trim()));
                        }
                    } catch (NumberFormatException E) {
                        System.out.println("Opps there is a mistake "
                                + "I was expecting a number and I found: " + temp);
                        System.out.println("This row will be ignored");
//                      break;
                    }
                } else {
                    if (temp.equalsIgnoreCase("")) {
                        row.add((" "));
                    } else {
                        row.add(temp);
                    }
                }
                j++;
            }
            if (row.size() == numberOfColumns) {
                table.add(row);
            }
        }// close for while
        inputStream.close();
    }

家庭作業?

這是有關如何思考的線索:

  main:
    start loop
      start
        do stuff
        set ok to end
      catch exception
        set not ok to end
    loop if not ok to end

我不確定您是否要這樣做,但是下面的代碼將一次又一次地運行,直到成功為止(如:不引發異常):

public static void main(String[] args){

    while(true){
        try{
            // execute your code
            break; // if successful, exit loop
        }catch(SomeException e){
            // handle exception
        }catch(SomeOtherException e){
            // handle exception
        }finally{
            // clean up, if necessary
        }
    }

}

注意: while(true)是一個可怕的構造,我相信您的老師不會喜歡的。 也許您會找到一種更好的方式重新表述。

這有點hack,但是您可以嘗試再次調用main方法,並傳遞參數。 只要不修改參數的字符串數組,只需調用main(args); 從主例程中的try / catch塊。 當然,如果不斷發生異常,您將無限循環並破壞堆棧:P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM