2011-09-05 14 views
-1

我正在編寫程序,如果它捕捉到一個異常,我想重置整個程序,無論如何請告訴我,我真的需要今晚完成它嗎?如何將程序重置爲主字符串參數?

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

「復位」是什麼意思?什麼樣的節目? GUI?命令行? – Thilo

+0

命令行只有 –

回答

2

功課?

下面是關於如何看待這一個線索:

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

+1使用僞代碼 –

+0

我已經有代碼問題是代碼不斷重新設置哪個另一種方法,我想爲什麼不只是重置整個程序。 –

+0

@chuck如果你已經有了代碼,那你爲什麼不發佈它,以便我們告訴你它有什麼問題? –

1

我不知道,如果你的意思是這樣,但直到成功爲止下面的代碼將再次運行和試(如:不拋出一個異常):

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

另外請注意,如果這真的「重置」程序取決於'doSomeStuff'具有什麼樣的副作用。在例外之後,它很可能處於相當不一致的狀態。如果你再次運行它,它可能會繼續拋出相同的異常。您應該考慮想要導致重試的異常類型。 – Thilo

+0

@Thilo,真的,添加了一些更具體的細節 –

+0

代碼添加請看看 –

0

這是一個黑客,但你可以嘗試再次調用主方法,傳遞參數。只要您不修改參數的字符串數組,只需從主例程中的try/catch塊中調用main(args);即可。當然,如果異常繼續發生,您將無限循環並吹出堆棧:P

相關問題