【问题标题】:Return statement not working when calling another method调用另一个方法时返回语句不起作用
【发布时间】:2014-10-22 06:15:55
【问题描述】:

我最近开始尝试 return 语句,对此我有一个小小的疑问——当我有一个调用另一个方法的方法时,我正在调用的那个方法的 return 语句会被显示吗?

举个例子更清楚-

/** Program to test return statment */

public class Test
{
   public static void main(int a)
   {
      EvenOrOdd(a);
   }
   private static boolean EvenOrOdd(int a)
   {//I can declare as public and run directly but then what is the point in calling     the method?
      if(a%2==0) 
      {
        System.out.println("The output is true.");//Displays
        return true;//Does not display(As in that window does not pop up with the result.)
      }
      else
      {
        System.out.println("The output is false.");//Displays  
        return false;//Does not display
      }

   }
}

如果我只是简单地删除主方法(或者甚至公开第二个方法并直接运行它),我的 return 语句会显示,但是如果我尝试调用该方法并运行程序,我的 return 语句不会显示.

所以这只是我面临的一个问题,还是 Java 中的一般规则,即当您调用另一个方法(具有 return 语句)时,return 语句不起作用?

如果是后者,那我很抱歉,我没有意识到这一点。

谢谢...

                               ***UPDATE***

似乎没有人明白我的意思。我再举一个例子-

请运行这个程序-:

/** Program to test Return statment;simple program to return sum of two digits */

public class Return_Test
{
   public static int main(int a,int b)
   {
    return a+b;//What I am lloking for is that box in which this is displayed.
   }
}

【问题讨论】:

  • 我没有看到它应该显示的任何地方...
  • @Eran 这是 BlueJ,允许您接受您希望在 main 方法中输入的任何数据类型。
  • 您好像缺少System.out.println。添加这条语句System.out.println(EvenOrOdd(a)); 显示函数的返回
  • @JackSully BlueJ 在学习编程基础时是一个有用的工具,它有助于推迟复杂的语法,即使没有终端 I/O,例如 System.out.println( ""),我不知道它是怎么做的,我建议你要么遵循那种学习方式,要么遵循传统的方式,即尽早让自己接触语法,忽略任何你不理解的关键字,这样输入,稍后当您在学习了基础知识后进入该部分时,您可以探索...
  • @DroidIcs 嗯...你说得对,我想我必须要有耐心。谢谢...

标签: java return bluej method-call


【解决方案1】:

return 语句只返回值,不显示 如果没有捕捉到返回值,怎么显示呢?添加这样的东西并尝试 ,

public class Test
{
   public static void main(int a)
   {
    boolean temp=EvenOrOdd(a);
    if(temp)
    System.out.println("Output is True");
    else
    System.out.println("Output False(not even )");
    //Or you can directly call the method as' System.out.println(EvenOrOdd));'

   }
   private static boolean EvenOrOdd(int a)
   {//I can declare as public and run directly but then what is the point in calling     the method?
      if(a%2==0) 
      {
        System.out.println("The output is true.");//Displays
        return true;//Does not display
      }
      else
      {
        System.out.println("The output is false.");//Displays  
        return false;//Does not display
      }

   }
}

请尝试学习一些好的命名约定,类是这样命名的, FirstSecond,TestException(每个单词都以大写字母开头)等,方法以小写字母开头,isPrime(),isEven(),

【讨论】:

  • 没有@MadProgrammer,没有。不要递归。很好的建议,但不是操作员对其进行编程的方式。
  • 我从来没有说过递归...你只是不需要修改 EvenOrOdd 方法(来自您的原始答案),只需显示方法的结果...
  • 你的程序有输出吗?
【解决方案2】:

很多其他响应者不知道的是,当您在 BlueJ 中运行一个方法时,它会执行该方法,如果该方法的返回值是非 void,它会显示在一个弹出对话框中调用 toString。这就是提问者所显示的值的意思。

用户最初的问题的答案是,通过用 void return 包围方法,它“隐藏”了结果。所以这段代码:

public void callMe1(int a)
{
    EvenOrOdd(a);
}

不会显示退货。但是如果调整返回类型,实际返回的是内部调用的值:

public int callMe2(int a)
{
    return EvenOrOdd(a);
}

然后BlueJ会显示返回值。显示方面由 BlueJ 决定,但是否返回值的规则与 Java 相同;无效意味着没有回报。

【讨论】:

    【解决方案3】:

    在方法体中,您使用return statement to return the value。它不会自行打印任何内容。

    已完成更改 - System.out.println(EvenOrOdd(5));

    public class Test {
    
        public static void main(String[] args) {
            System.out.println(EvenOrOdd(5));
        }
    
        private static boolean EvenOrOdd(int a) {// I can declare as public and run directly but then what is the point in
                                                 // calling the method?
            if (a % 2 == 0) {
                System.out.println("The output is true.");// Displays
                return true;// Does not display
            } else {
                System.out.println("The output is false.");// Displays
                return false;// Does not display
            }
    
        }
    
    }
    

    输出

    The output is false.
    false
    

    【讨论】:

      【解决方案4】:
      1. 您从未真正显示该方法的返回结果...
      2. 方法的名称是消费EvenOrOdd返回truefalse是模棱两可的,可能isEven会更好...

      你可以试试...

      System.out.println(a + " is even = " + EvenOrOdd(a));
      

      您还应该避免在单个方法中使用多个 return 语句,这很快就会让人对方法的实际工作方式感到困惑,在您的情况下,您可以同时降低过度复杂性,例如.. .

      private static boolean isEven(int a)
      {
      
          boolean isEven = false;
          if(a%2==0) 
          {
              System.out.println("The output is true.");//Displays
              isEven = true;//Does not display
          }
      
          return isEven;
      
      }
      

      【讨论】:

        【解决方案5】:

        首先将您的主要签名从main(int a) 更改为main(String [] args) 否则您将收到以下运行时异常:

        Error: Main method not found in class yourpackagename.Test, please define the main method as:
           public static void main(String[] args)
        

        你没有打印函数返回的值:

        在你的main 中这样做:

        System.out.println(EvenOrOdd(5));
        

        【讨论】:

        • 仅供参考:“这是 BlueJ,允许您接受您希望在 main 方法中输入的任何数据类型”
        • 是的,我也没用过:P
        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 2017-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        相关资源
        最近更新 更多