在编程中使用回报

时间:2017-04-07 13:29:49

标签: java

我对return关键字感到困惑。我知道这些用法:

一个。当我们必须打印一些东西时

System.out.println(functionname());

B中。当我们必须将函数的输出复制到某个

int c=function(3);

它还有其他用途吗?

我还有另外一个问题,关于这项任务:

  

创建一个具有两个实例字段的人员 - 身高和体重。   包含一个接受相同对象的方法update_fields   class并在将高度加倍后返回类的对象   和传递物体的重量。

在更新字段方法中,为什么我们需要在objectname.methodname();调用方法时将对象作为参数传递 ? 在将值加倍后,return有什么用?

class Person
{
    int ht;
    int wt;
    Person update_fields(Person p1)
    {

        p1.ht*=2;
        p1.wt*=2;
        return p1 ;
    }
} 

我觉得这个问题应该只是将两个值加倍而不需要参数并返回任何内容。

 void update_fields()
        {

            p1.ht*=2;
            p1.wt*=2;

        }

5 个答案:

答案 0 :(得分:0)

在java中,您可以创建一个交互式代码片段的网络。让一个方法将值传递给另一个方法的最相关技术是使用return。它允许一个方法将计算结果或变量访问权传递给调用方法。

答案 1 :(得分:0)

首先,欢迎编程。

其次,“Return”是告诉方法报告某种值的关键字。它只能返回1个值,但该值可以是一个对象,如类或数组。

第三,将Person类传递给方法的原因是范围问题。是的,每个人都有身高和体重,但每个人都有不同的身高和体重。该方法的作用是将 人的身高和体重加倍,而不是所有人。如果您希望所有人分享身高和体重,您必须将这些字段设为静态。然后,如果你改变任何人的身高或体重值,他们都会改变。

答案 2 :(得分:0)

调用方法时,该方法执行语句,然后它可能会也可能不会返回值。

如果方法的返回类型指定为void,则它不返回值。如果它不是void(例如,intPersonString或任何其他类型),则该方法必须返回一个值,并且必须使用return关键字返回该值。

在调用方法的位置,您确实可以将结果存储在变量中,如您给出的示例所示:

// Store whatever function(3) returns into the variable c
int c = function(3);

或者您可以立即将返回值传递给另一个方法,就像您在第一个示例中所做的那样:

// Pass whatever functionname() returns to the method println()
// of the System.out object
System.out.println(functionname());

// This is the same as storing the value first:
Object result = functionname();
System.out.println(result);

在您的示例中,诸如update_fields之类的Setter方法通常不应该将对象传递给您要在其中设置值的对象。只需在当前对象上设置值即可。这些方法通常也不会返回对象。

class Person
{
    int ht;
    int wt;

    void update_fields()
    {
        ht *= 2;
        wt *= 2;
    }
} 

答案 3 :(得分:0)

  

现在在更新字段方法中为什么我们需要将对象传递为   调用方法时的参数   objectname.methodname(); ??

我同意你的看法,考虑到你可以修改update_fields person字段,不需要将对象的引用传递给ht方法}和wt通过公共字段(包绑定)。

class Person
{
    int ht;
    int wt;
    Person update_fields(Person p1)
    {

        p1.ht*=2;
        p1.wt*=2;
        return p1 ;
    }
} 
  

将值加倍后返回的用途是什么?

return很简单,因为名称表示它已用于return数据,在您的情况下,它用于returnperson对象的引用已经变异/改变了。

  

我觉得这个问题应该只是加倍了   没有参数并返回任何内容的值。

您正在寻找以下内容:

示例:

class Person
{
    private int ht;
    private int wt;

    void update_fields(){
       ht *= 2;
       wt *= 2;
   }
} 

上述方法考虑完全封装,无论何时调用,相应的对象状态(ht& wt)都将被变异/更改。

<强>结论

  

创建一个具有两个实例字段的人员 - 身高和体重。   包含一个接受相同对象的方法update_fields   class并在将高度加倍后返回类的对象   和传递物体的重量。

如果字段在private类中声明为person,如下所示:

class Person
{
    private int ht;
    private int wt;
    Person update_fields(Person p1)
    {

        p1.ht*=2;
        p1.wt*=2;
        return p1 ;
    }
} 

然后将person对象传递给方法是有意义的,因为这是在创建对象时改变/更改其状态的唯一方法。这当然不包括getterssetters。话虽如此,仅为此目的传递对象是一种开销,为它创建getterssetters会更容易。

最后,考虑到这是你的任务,我只是建议按照它说的那样去做。

答案 4 :(得分:0)

打印和分配变量(您称之为“ copy ”)是return值的两种用途。您还可以使用返回的值作为另一个方法调用的输入:

int x = calculator.add(3,calculator.add(4,5));

有助于将对象视为执行某些有用操作的计算机,将方法视为与计算机交互的方式。有时当你对一台机器做某事时,你不想看到一个结果(或者你对副作用感到满意,例如它会在屏幕上打印一些内容,将某些东西保存到一个文件等)。

更多的时候,当你对机器做某些事情时,你想回复一些事情来说明发生的事情 - 当我把硬币放在机器上时,我想要一罐饮料作为回报。当我将3 + 3 =输入计算器时,我希望它告诉我6

return有两个用途:

  1. 在结束}
  2. 之前留下方法
  3. 告诉方法为调用者提供什么值
  4. 如果方法的返回类型为void,则仅适用第一次使用:

     public void printBiggerNumbers(int num) {
          if(num < 10) {
               return;
          }
          System.out.println(num);
     }
    
    当返回类型为return时,

    void是可选的。

    如果方法的返回类型不是void,则方法的所有可能路径必须return结尾,以便返回正确类型的内容。

     public int sumBiggerNumbers(int x, int y) {
          if(x > 10 && y > 10) {
               return x + y;
          }
     }
    

    ...无法编译,因为可以在不点击}的情况下到达最终return。该程序不知道该怎么做,所以没有意义。

    (还有一种选择 - 而不是返回,一种方法可以抛出异常,但你会在另一天了解这一点)

    你的例子不是很多程序员会做的事情,因为正如你所注意到的那样,它没有多大意义。您更有可能将此void方法设为this

    class Person {
        int ht;
        int wt;
    
        void updateFields()
        {
            this.ht *= 2;
            this.wt *= 2;
        }
    } 
    

    用过:

    Person p = new Person();
    p.ht = 20;
    p.wt = 10;
    p.updateFields();
    System.out.println("" + p.ht + " " + p.wt);
    

    getters and setters 的常见模式非常清楚地表明:

    • 返回void,拥有参数和更改对象状态的方法
    • 返回某些内容,没有参数,并且不更改对象状态的方法

      class Person {
           private int ht;
           private int wt;
      
           public void setHt(int ht)
           {
               this.ht = ht;
           }
      
           public int getHt() {
               return ht;
           }
       }
       ...
      
       Person p = new Person();
       p.setHt(6);
       System.out.println("Height: " + p.getHt);
      

      有一种设计模式可以执行类似于您偶然发现的操作,即处理对象并返回它,这是流畅的API 。对于像你这样的绝对初学者来说,这是一个相当高级的话题,所以现在可以跳过它,但是:

      public class Person {
          private int ht;
          private int wt;
      
          public Person withHt(int ht) {
              this.ht = ht;
              return this;
          }
      
          public Person withWt(int wt) {
              this.wt = wt;
              return this;
          }
      }
      

    ...允许我们称之为:

    Person p = new Person().withHt(6).withWt(3);
    

    我不建议您这样做,但它是构建器模式的简化版本,在某些情况下非常有用。