2012-03-10 117 views
0

我最近開始嘗試使用Java.I POJ跨problem來(也可here對UVA),這是知道的樹恢復。這裏是我的代碼:爲什麼OJ爲這段代碼報告運行時錯誤?

import java.util.Scanner; 

公共類主要{

static String pre, in; 
static char[] post = new char[100]; 
static int len; 

public static void solve(int p1, int p2, int m1, int m2) { 
    if (p1 > p2) 
     return; 
    int i; 
    for (i = m1; i <= m2; i++) { 
     if(in.charAt(i)==pre.charAt(p1)) 
      break; 
    } 
    post[--len] = pre.charAt(p1); 
    if (p1 == p2) 
     return; 
    solve(p1 + (i + 1) - m1, p2, i + 1, m2); 
    solve(p1 + 1, p1 + i - m1, m1, i - 1); 
} 

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    while (sc.hasNextLine()) { 
     pre = sc.next(); 
     in = sc.next(); 
     len = pre.length(); 
     solve(0, len - 1, 0, len - 1); 
     System.out.println(post); 
    } 
} 

}

代碼運行以及給定的測試用例eclipse.However默認的編譯選項它報告運行時錯誤,當我submit.I'm想知道這是怎麼happen.Thank你

回答

0

也許當發動機運行不同的測試情況下比你已經嘗試和你的代碼有對這些案件產生一個運行時錯誤的缺陷。這可能是由某種非法訪問引起的。

例如;

while (sc.hasNextLine()) { 
    pre = sc.next(); 
    in = sc.next(); 
... 
} 

看起來很可疑。你肯定sc有兩個next()的可用一個hasNextLine()檢查後?

此外;檢查數組索引:if(in.charAt(i)==pre.charAt(p1))post[--len] = pre.charAt(p1)。您可以嘗試在每個這樣的行之前使用斷言:assert(post.length < len - 1 && pre.length() < p1)

你能想到的,這些線可能會失敗,任何投入?您可能試圖訪問不存在的數組或字符串的索引。根據這種角落情況測試你的代碼。

相關問題