【问题标题】:How do I use a return statement within a static method for an object class? [duplicate]如何在对象类的静态方法中使用 return 语句? [复制]
【发布时间】:2019-03-18 23:16:12
【问题描述】:

我目前正在研究与三角形相关的对象类,但我的静态方法有问题。

对于家庭作业,我的教授特别想要这个

一个静态方法isTriangle(),它接受3个双精度值作为边长,如果给定的边可以形成三角形,则返回true,否则返回false。 [求助:边s1、s2和s3可以组成一个三角形IF s1

我目前拥有的是:

package Homework;

import java.util.Scanner;

public class Triangle {
  Scanner scan1 = new Scanner(System.in);
  private double side1;
  private double side2;
  private double side3;

  public Triangle(double s1, double s2, double s3) {
    this.side1 = s1;
    this.side2 = s2;
    this.side3 = s3;
  }    

  public static boolean isTriangle(Triangle verify) {
    return (side1 < side2 + side3 && side2 < side1 + side3 && side3 < side1 + side2);
  }    
}

这是我收到的错误消息:

Cannot make a static reference to the non-static field.

【问题讨论】:

  • 实际上我相信您正在寻找在 StackOverflow 上询问此问题的快捷方式。只需按照作业进行即可:您的isTriangle与整个练习中的建议无关。
  • 如果你想访问你的Triangle对象verify的字段,那么你应该使用verify.side1等。
  • @MatíasFidemraizer 我并不是真的要求捷径或公然的答案。这与我收到错误消息的原因有关。
  • @Zepheriah 检查我的答案。我不会为您提供解决方案,因为它非常明显:仔细阅读练习!
  • @Roshana 不要为了分数而给出答案。让他/她先理解这个概念。

标签: java oop static return boolean


【解决方案1】:

您不能在静态方法中访问实例变量。您只能在静态方法中直接访问静态变量或静态方法。因此请使用 isTriangle() 方法中的参数。

【讨论】:

    【解决方案2】:

    您正在尝试从静态成员访问实例成员 - 这是不可能的 -。这是错误的根源。

    关于作业,请按照说明操作:

    一个静态方法 isTriangle(),它接受 3 个 double 值作为边长并返回 true 如果给定的边可以形成三角形

    我没有看到具有 3 个 double 类型输入的静态方法。如果你按照老师在整个练习中的建议去做,你自己就会得到答案。

    【讨论】:

      【解决方案3】:

      您正在尝试访问 static 方法中的实例变量。因此错误“无法对非静态字段进行静态引用”。我不想透露更多线索,因为这是一个作业,你应该自己解决。

      【讨论】:

        【解决方案4】:

        您必须在静态方法中使用参数verify,而不是 Triangle 类中的字段。例如:

        public static boolean isTriangle(Triangle verify) {
            return (verify.side1 < verify.side2 + verify.side3 && verify.side2 < verify.side1 + verify.side3 && verify.side3 < verify.side1 + verify.side2);
          }  
        

        【讨论】:

          【解决方案5】:

          您可以将静态函数修改为:

          public static boolean isTriangle(Triangle verify) {
            return verify.getSide1() < (verify.getSide2() + verify.getSide3()) 
               && verify.getSide2() < (verify.getSide1() + verify.getSide3()) 
               && verify.getSide3() < (verify.getSide1() + verify.getSide2());
          }
          

          仅供参考:我尚未测试实际代码。 您还应该使用 getter/setter 或将私有字段公开以使用 verify.side1 而不是 verify.getSide1()

          【讨论】:

            猜你喜欢
            • 2012-05-15
            • 1970-01-01
            • 1970-01-01
            • 2018-03-03
            • 2016-09-13
            • 2019-08-29
            • 1970-01-01
            • 2013-03-03
            相关资源
            最近更新 更多