簡體   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