2016-07-08 134 views
0
public class Factorial { 

    int fact (int n) { 

     int result; 

     if (n==1 ||n==0) 
      return 1; 

     else 
      result = n*fact(n-1); 
     return result; 
    } 

假设n小于0(-1,-2等),并且这些值的阶乘值是“无效”(我希望系统打印出“无效”,如果输入值(n)小于0我该如何修改代码我知道该方法只返回一个整数值而不是String递归:阶乘

+0

任何值或者检查一下你打电话给你的方法或抛出一个异常 –

+2

抛出'IllegalArgumentException'与消息之前'不应该不低于0' – Saravana

+0

@Saravana当然,这是最好的解决方案,但我认为OP处理异常有点早,如果他甚至不知道任何关于System.out.println() – Yev

回答

1

只需添加一个if语句检查负输入一个因子不应该返回负数,因此您可以返回-1以指示错误:

int fact (int n) { 
    if (n < 0) { 
     return -1; 
    } 

    if (n==1 || n==0) { 
     return 1; 
    } 
    else { 
     return n * fact(n-1); 
    } 
} 
1

作为@Saravana说,你必须添加抛出声明看起来是这样的:

int factorial (int n) 
    { 
     if (n < 0) 
     { 
      throw new IllegalArgumentException("Sorry value cannot be negative"); 
     } 

     if (n==1 || n==0) 
     { 
      return 1; 
     } 
     else 
     { 
      return n * fact(n-1); 
     } 
    } 

如果小于零的任何值会出现一个错误,指出用户没有输入值正确。希望这有助于! :)

+0

我得到这个时我尝试运行该程序! 异常在线程 “主” java.lang.IllegalArgumentException异常:对不起 (Factorial.java:10)\t在exams.Factorial.fact \t在exams.Recursion.main(Recursion.java:7) –

+0

那是你希望编译器去做。您想让用户知道他们输入的内容不正确,并且应该抛出它们造成的异常。 – Aaron

1

I want the system to print out "Not valid" if the input value (n) is less than 0

您可以通过在方法的开头添加

if (n < 0) { 
    System.out.println("Not valid"); 
} 

做到这一点。方法不会返回字符串“无效”,但会打印出来。
之后,不需要进一步计算即可退出该方法。您可以根据任一下列方式您的需求做到这一点:

如果您PROGRAMM可以做更多的则只是计算阶乘,你在任何情况下需要一个返回值:

if (n < 0) { 
    System.out.println("Not valid"); 
    return -1; // or some other inapplicable for a factorial result integer value 
} 

或者你可以还只是“严出”全PROGRAMM whitout返回像

if (n < 0) { 
    System.out.println("Not valid"); 
    System.exit(1); // 1 or any other nonzero integer value 
        // to tell the system it exits with an error. 0 otherwise 
}