2012-03-10 137 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)

你能想到的,这些线可能会失败,任何投入?您可能试图访问不存在的数组或字符串的索引。根据这种角落情况测试你的代码。

相关问题