繁体   English   中英

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

[英](Java) Calling methods in constructor?

***我尝试搜索,但我不明白会发生什么。 抱歉。

我正在为学校进行服务器/客户端项目。 我机智已尽,我将放弃。 我没有课堂上的笔记,所以我需要一些帮助。 首先,我将发布给出的说明,然后发布当前代码,然后发布问题。

服务器方向:

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

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

  • Triangle类必须具有如上所述的以下方法:

  • 公共布尔is_right()公共布尔is_isoc()
  • 公共布尔is_equil()公共布尔is_scal()
  • public String toString()–返回Triangle的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方法获得的周长加/减到可变周长的正确方法是什么? 这些说明说要在构造函数中调用calc_perim方法,但是我不知道怎么做,所以我只是让它自己进行计算。

在构造函数中,调用方法isValid()之后,为什么Java告诉我未使用变量'v'? 我是否错误地调用了isValid()? >>>>>如何在构造函数中调用方法? <<<<<

除了该主要问题之外,服务器类还可以正常工作。

从Java编译器发出的“未使用”消息从技术上讲是警告,而不是错误,因此即使您确实愿意,即使消息仍然有效,您也可以运行程序。 但是您的直觉是正确的-忽略这些消息是一个坏主意。

在这种情况下,您的代码有严重的问题。 您正在调用v = false ,这意味着您正在为v 分配 false值。 将其更改为v == false 通过使用== ,您正在进行比较,这是您真正想要的。

意见建议:

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

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

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

    如果(v =假)

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

    私人无效addTotalPerim(){perim + = calc_perim(); } private void reduceTotalPerim(){perim-= calc_perim(); }

  2. 为什么在addTotalPerim()之后调用reduceTotalPerim()并不清楚。

  3. isValid函数应检查所有组合,例如a + b> c,b + c> a,c + a> b,如果任何失败应无效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM