【问题标题】:Obtaining Value from a Method (java)从方法中获取值(java)
【发布时间】:2013-02-02 07:55:20
【问题描述】:

到目前为止,我已经完成了此代码,但我正在尝试学习如何完成此方法,以便它编译使用的总边数并在最后一个打印行中打印该值。问题方法是getTotalSides,我目前将它设置为返回0,但我希望它返回总边数,意思是:mp1.getSides() + mp2.getSides() + mp3.getSides() + mp4.getSides( )。

public class TestParts {

public static void main(String[] args) {

    MyPolygon mp1 = new MyPolygon();
    MyPolygon mp2 = new MyPolygon(4);
    MyPolygon mp3 = new MyPolygon(5);
    MyPolygon mp4 = new MyPolygon(6);
    System.out.println("Polygon 1 has " + mp1.getSides()
            + " sides, angles total " + mp1.getSumOfAngles());
    System.out.println("Polygon 2 has " + mp2.getSides()
            + " sides, angles total " + mp2.getSumOfAngles());
    System.out.println("Polygon 3 has " + mp3.getSides()
            + " sides, angles total " + mp3.getSumOfAngles());
    System.out.println("Polygon 4 has " + mp4.getSides()
            + " sides, angles total " + mp4.getSumOfAngles());
    System.out.println("There are " + MyPolygon.getTotalSides()
            + " total sides");

}
}

class MyPolygon {
double getSides;

MyPolygon() {
    getSides = 3;
}

static double getTotalSides() {

    return 0;
}

double getSides() {
    // TODO Auto-generated method stub
    return getSides;
}

MyPolygon(double newGetSides) {
    getSides = newGetSides;
}

double getSumOfAngles() {
    return ((getSides - 2) * 180);
}

void setGetSides(double newGetSides) {
    getSides = newGetSides;
}

【问题讨论】:

  • setGetSides?这是什么疯子?

标签: java methods


【解决方案1】:

你为什么不把你写的表达式写进去:

System.out.println("There are " + (mp1.getSides() + mp2.getSides() + mp3.getSides() + mp4.getSides()) + " total sides");

由于您尝试将 getTotalSides 编写为类的一部分,因此没有一种简单的方法可以检查所有其他实例化对象并调用它们的方法 getSides 来将所有总边数相加。您可以定义一个函数来获取所有多边形对象并将边相加,但它不能在类定义下。

【讨论】:

    【解决方案2】:

    如果你真的需要一个方法,你可以使用 varargs (variable arity arguments) 来达到这个目的:

    static double getTotalSides(MyPolygon... polygons) {
      double x = 0;
    
      for (MyPolygon p: polygons)
      {
       x+= p.getSides();
      }
       return x;
    }
    

    然后这样调用:

    System.out.println("There are " + MyPolygon.getTotalSides(mp1,mp2,mp3,mp4)
                + " total sides");
    

    或者做一个数组

    MyPolygon myPolygons = new MyPolygon [4];
    myPolygons [0] = mp1;
    myPolygons [1] = mp2;
    myPolygons [2] = mp3;
    myPolygons [3] = mp4;
    System.out.println("There are " + MyPolygon.getTotalSides(myPolygons)
                + " total sides");
    

    但是,更好的解决方案是从开始将您的多边形存储在数组/列表中,然后将整个数组/列表传递给方法,执行循环并返回结果。但请注意,列表和数组是不同的,因此您需要相应地修改方法签名。

    【讨论】:

      【解决方案3】:

      您需要查看对象的scope,也许您可​​以使用某种Collection

      public class TestParts {
      
          public static void main(String[] args) {
      
              final MyPolygon mp1 = MyPolygon.newInstance(3);
              final MyPolygon mp2 = MyPolygon.newInstance(4);
              final MyPolygon mp3 = MyPolygon.newInstance(5);
              final MyPolygon mp4 = MyPolygon.newInstance(6);
              System.out.println("Polygon 1 has " + mp1.getSides()
                      + " sides, angles total " + mp1.getSumOfAngles());
              System.out.println("Polygon 2 has " + mp2.getSides()
                      + " sides, angles total " + mp2.getSumOfAngles());
              System.out.println("Polygon 3 has " + mp3.getSides()
                      + " sides, angles total " + mp3.getSumOfAngles());
              System.out.println("Polygon 4 has " + mp4.getSides()
                      + " sides, angles total " + mp4.getSumOfAngles());
              System.out.println("There are " + MyPolygon.getTotalSides()
                      + " total sides");
      
          }
      }
      
      class MyPolygon {
      
          private static final Collection<MyPolygon> POLYGONS = new LinkedList<MyPolygon>();
          private final double sides;
      
          private MyPolygon(final double sides) {
              this.sides = sides;
          }
      
          public static MyPolygon newInstance(final double sides) {
              final MyPolygon polygon = new MyPolygon(sides);
              POLYGONS.add(polygon);
              return polygon;
          }
      
          public static double getTotalSides() {
              double sides = 0d;
              for (final MyPolygon polygon : POLYGONS) {
                  sides += polygon.getSides();
              }
              return sides;
          }
      
          public double getSides() {
              return sides;
          }
      
          public double getSumOfAngles() {
              return ((sides - 2) * 180);
          }
      }
      

      我已整理您的代码,使其符合命名约定(无 getSides 变量)。

      【讨论】:

        【解决方案4】:

        如果您想要有关已创建的所有边数的全局信息,请尝试使用静态变量:

        class MyPolygon {
        
            private static int totalSides;
            private int sides;
        
            MyPolygon() {
                this(3); // constructor chaining: really useful
            }
        
            MyPolygon(int numSides) {
                this.sides = numSides;
                MyPolygon.totalSides += numSides;
            }
        
            // ... the rest, incl. getter for sides and static getter for totalSides
        
        }
        

        但是,当您不再需要一个多边形时,您必须以某种方式再次显式减少数字...

        【讨论】:

          猜你喜欢
          • 2012-11-21
          • 2012-05-17
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-30
          相关资源
          最近更新 更多