【问题标题】:How do I produce an error when input is bad?输入错误时如何产生错误?
【发布时间】:2014-10-31 13:50:52
【问题描述】:

我试图让我的程序在输入值过高时输出错误代码,但我只能让它在终端窗口中显示错误消息,而不是在方法返回中。代码如下:

public class AckermannAdvanced {
   
   public static long ack (long m, long n) {
      long ans;

      System.out.print("\f");
      if (m > 3 && n > 1) {
         System.out.print("Input values are too high");
      } else {
         if (m == 2)      ans = (2*n)+3;
         else if (m == 1) ans = n+2;
         else if (m == 0) ans = n+1;
         else if (n == 0) ans = ack(m-1, 1);
         else             ans = ack(m-1, ack(m, n-1));
         System.out.print(ans);
         return(ans);
      } 
      return 0;
   }
}

【问题讨论】:

  • 什么是“返回窗口”?
  • 返回窗口,我的意思是方法结果,根据我的IDE定义,它。我更专注于数学而不是计算机科学,所以如果我的一些术语和编程有点模糊/不正确,请原谅我。
  • 我不确定您在寻找什么。但也许这符合您的要求:throw new IllegalArgumentException("Input values too high");.
  • 这不是我想要的,但它确实有效。谢谢!
  • @R2B2 您能否删除您的评论并将其作为答案发布?然后可以将其标记为已接受,并可以进行投票。

标签: java recursion error-handling ackermann


【解决方案1】:

您可以使用带有大写 L 的 Long,然后它是一个表示 long 的对象。一旦你返回一个对象,你就可以返回null。 Java 在返回时会自动将long 转换为Long,因此其他返回应该相同。所以

    public static Long ack(long m, long n) //...
    //...
    if (m > 3 && n > 1) {
        return null;
    }

或者你可以让它返回一个OptionalLong

public static OptionalLong ack(long m, long n) //...
//No result
return OptionalLong.empty();
//Result
return OptionalLong.of(21438999L);

https://www.geeksforgeeks.org/optionallong-orelselong-method-in-java-with-examples/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多