奇怪的运行时错误

时间:2014-07-27 05:36:05

标签: java arrays loops runtime-error stack-overflow

以下代码正常 但是,一旦我在开始时接受任何整数输入,它就会进入无限循环。 我需要测试用例的整数值。

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

class TestClass {
public static void main(String args[] ) throws Exception {
    Scanner stdin = new Scanner(System.in);
     //HERE I JUST INPUT AN
     // INT VALUE PROGRAM GOES INFINITE LIKE int t = stdin.nextInt();
        long count = 0;     
        String str = stdin.nextLine();
        char[] c = str.toCharArray();
        for(int j=0;j<str.length();j++){
            switch(c[j]){
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                    count++;
                default : break;
            } 
        }
        arrangement(count,str.length());


}
    public static void arrangement(long v,long n){
    long total = fact(n);
    long together = ((combination(v))*(fact(n-1))*2);
    long answer = (total - together);
    if(answer>0)
        System.out.println(answer);
    else
        System.out.println("-1");
}

public static long fact(long n){
long ans;
    if(n==1 || n==0)
        return 1;
    else
        ans = fact(n-1)*(n);
    return ans;
}
public static long combination(long n){
    if(n==0)
        return 0;
    if(n==1)
        return 0;
    if(n==2)
        return 1;
    else
        return ((fact(n))/((fact(n-2))*2));
}

}

为什么会出现这个问题? 任何可能的运行时错误原因&gt;?

2 个答案:

答案 0 :(得分:0)

尝试放置scanner.nextLine();在nextInt()之后,如果你打算忽略该行的其余部分。有关nextInt()的类似问题,请参阅此帖子:Using scanner.nextLine()

答案 1 :(得分:0)

&#34;奇怪的&#34;运行时错误是(在

之后使用nextInt())
$ java TestClass
42

在42之后输入一个返回值,stdin.nextLine()读取一个长度为0的行。

arrangement( 0, 0 );

致电

fact(n-1)

n == 0,然后进入相当长的无限递归。堆栈溢出......

我想你可以轻松解决这个问题。