(Java)在构造函数中调用方法?

时间:2014-11-01 18:51:20

标签: java constructor

***我试着搜索,但我无法理解会发生什么。遗憾。

我正在为学校开发服务器/客户端项目。我在我的智慧结束,我即将放弃。我没有课堂笔记,所以我需要一些帮助。 首先,我会发布给出的指示,然后是我当前的代码,然后是我的问题。

服务器方向:

  • Triangle类必须具有以下实例变量:side_a,side_b,side_c。创建一个静态变量以跟踪创建的三角形对象的数量。还要创建一个静态变量来保存所有创建的Triangle对象的周长。

  • Triangle类的三参数构造函数应将三个输入值分配给对象的实例变量。如果不是有效三角形,则将所有边设置为1.创建一个名为isValid()的单独私有方法。三角形的任意两边的总和必须大于第三个以表示有效三角形。没有一方可能是0或负面。构造函数还应该向count添加1并调用方法来计算,然后将该对象的周长添加到累加器。

  • Triangle类必须具有上述方法:

  • public boolean is_right()public boolean is_isoc()
  • public boolean is_equil()public boolean is_scal()
  • public String toString() - 返回三角形的3个边的值

  • 您还应该在Triangle类中添加一个名为calc_perim的方法。此方法将使用Triangle对象的边来计算该对象的周长。

  • addTotalPerim。此方法将调用calc_perim并将该对象的边界添加到累加器。
  • reduceTotalPerim。此方法应从累加器中减去该对象的周长。

服务器代码:

public class Triangle {
private int side_a, side_b, side_c;
private static int count;
**//PROBLEM 1: Java tells me 'perim' is not used.**
private static int perim; 
private boolean valid;




public Triangle(int s1, int s2, int s3)
{

  side_a = s1; side_b = s2; side_c = s3;

  **//PROBLEM 2: Java tells me 'v' is not used.**

  boolean v = isValid();

  if (v = false)
  {side_a = 1; side_b = 1; side_c = 1;}



  Triangle.count++;
  calc_perim(s1,s2,s3);
  addTotalPerim();
  reduceTotalPerim();



  }

    private int calc_perim()    
   {
    int perimeterCalc = side_a + side_b + side_c;


    return perimeterCalc;
    }

   private void addTotalPerim()
   {


  Triangle.perim += calc_perim();

   }

   private void reduceTotalPerim()
   {
    Triangle.perim -= calc_perim();

  }

    private boolean isValid()
   {

    boolean valid1;    

   if  (side_a < 1)
       { valid1 = false;}
   else if (side_b < 1)
       { valid1 = false;}
   else if (side_c < 1)
       { valid1 = false;}
   else if ((side_a + side_b) < side_c || (side_a + side_b) == side_c)
       { valid1 = false;}
   else
       { valid1 = true;}

   return valid1;

   }

   public boolean is_right()
   {
   boolean right;
   if (((side_a * side_a) + (side_b * side_b)) == (side_c * side_c))
       right = true;
   else
       right = false;

   return right;
  }

  public boolean is_isoc()
  {
     boolean isoc;

   if (side_a == side_b)
       isoc = true;
   else if (side_a == side_c)
       isoc = true;
   else if (side_b == side_c)
       isoc = true;
   else
       isoc = false;

   return isoc;

  }

  public boolean is_equil()
  {
   boolean equil;

   if (side_a == side_b && side_a == side_c)
       equil = true;
   else
       equil = false;

   return equil;

   }

   public boolean is_scal()
  {
   boolean scal;

   if (side_a == side_b || side_a == side_c || side_b == side_c)
       scal = false;
   else 
       scal = true;

   return scal;
  }

   public String toString()

  {
  return "Side 1: " + side_a + " Side 2: " + side_b + " Side 3: " + side_c;

  }

  }

很抱歉格式化但是这个网站有一种很糟糕的格式化代码的方式,除非我误解了某些内容......

服务器问题:

将通过方法calc_perim获得的周长加/减到varible perim的正确方法是什么?方向说在构造函数中调用calc_perim方法,但我无法弄清楚如何,所以我只是让它自己进行计算。

在构造函数中,在调用方法isValid()之后,为什么我告诉Java变量&#39; v&#39;未使用?我是否错误地调用了isValid()?的&GT;&GT;&GT;&GT;&GT;如何在构造函数中调用方法? &LT;&LT;&LT;&LT;&LT;

除了那个主要问题,服务器类工作正常。

2 个答案:

答案 0 :(得分:0)

未使用&#34;&#34;来自Java编译器的消息在技术上是一个警告,而不是一个错误,因此如果您真的想要,即使消息仍然有效,您也可以运行您的程序。但是你的直觉是正确的 - 忽略这些信息是一个坏主意。

在这种情况下,您的代码存在严重问题。您正在拨打v = false,这意味着您false的值分配给vv == false。将其更改为==。通过使用{{1}},您可以进行比较,这是您真正想要的。

答案 1 :(得分:0)

建议:

  1. 在Triangle类中,初始化静态变量。

    private static int count = 0; private static int perim = 0;

  2. 在Triangle构造函数中,更改

    if(v = false)

  3. if (v == false)
    
    1. 将calc_perim更改为:

      private void addTotalPerim()    {      perim + = calc_perim();    }    private void reduceTotalPerim()    {     perim - = calc_perim();    }

    2. 为什么在addTotalPerim()之后调用reduceTotalPerim(),没有明白这一点。

    3. isValid函数应检查所有组合,如a + b&gt; c,b + c&gt; a,c + a&gt; b,如果任何一个失败应该无效