как сбросить программу до аргументов основной строки? - PullRequest
0 голосов
/ 05 сентября 2011

Я пишу программу, и если она обнаруживает Исключение, я хочу сбросить всю программу, есть ли она, пожалуйста, скажите, мне действительно нужно закончить ее сегодня вечером?

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();
    }

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011

домашнее задание?

Вот ключ к пониманию:

  main:
    start loop
      start
        do stuff
        set ok to end
      catch exception
        set not ok to end
    loop if not ok to end
1 голос
/ 05 сентября 2011

Я не уверен, что вы имели в виду это, но следующий код будет выполняться снова и снова, пока не выполнится (например: не выдает исключение):

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) ужасная конструкция, которая, я уверен, вашим учителям не понравится.Возможно, вы найдете лучший способ перефразировать это.

0 голосов
/ 05 сентября 2011

Это что-то вроде хака, но вы можете попробовать снова вызвать метод main, передав аргументы.Пока вы не изменили строковый массив аргументов, просто вызовите main(args); из блока try / catch в основной подпрограмме.Конечно, если исключение будет повторяться, вы будете бесконечно зацикливаться и взорвать стек: P

...