2012-03-13 20 views
1

ok私の割り当て私は、ユーザが与えた温度を格納し、設定されたパラメータでチェックして、Ethy/Oxygen/Waterが凍結しているか沸騰しているかを調べるクラスを作成するはずです。最後に入力した温度で凍結/煮沸されるものが表示されます。私はクラスとテスターの両方の大半を完了しましたが、私のコードでいくつかのエラーが発生しています。私は誰にも私に答えを与えるように求めていませんが、あなたが私が間違っていることを教えていただけたら、私はそれを高く評価します。Javaクラスメソッドに問題があります

public class FreezingBoilingPoints { 

    private int temperature; 

    public FreezingBoilingPoints(int temp) { 
     temperature = temp; 
    } 

    public void setTemperature(int temp) { 
     temperature = temp; 
    } 

    public int getTemperature() { 
     return temperature; 
    } 

    private Boolean isEthylFreezing(int temperature) { 
     if (temperature <= -173) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isEthylBoiling(int temperature) { 
     if (temperature >= 172) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isOxygenFreezing(int temperature) { 
     if (temperature <= -362) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isOxygenBoiling(int temperature) { 
     if (temperature >= -306) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isWaterFreezing(int temperature) { 
     if (temperature <= 32) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private Boolean isWaterBoiling(int temperature) { 
     if (temperature >= 212) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public String showTempinfo() { 
     if (isEthylFreezing()) { 
      System.out.println("Ethyl will freeze"); 
     } 

     if (isEthylBoiling()) { 
      System.out.println("Etheyl will boil"); 
     } 

     if (isOxygenFreezing()) { 
      System.out.println("Oxygen will freeze"); 
     } 

     if (isOxygenBoiling()) { 
      System.out.println("Oxygen will Boil"); 
     } 

     if (isWaterFreezing()) { 
      System.out.println("Water will freeze"); 
     } 

     if (isWaterBoiling()) { 
      System.out.println("Water will boil"); 
     } 
    } 
} 

、私のテスターのためのコードは以下の通りです:ここでは、クラスのための私のコードがある

import java.util.Scanner; 

public class FreezingBoilingTester { 
    public static void main(String[] args) { 
     int temperature; 

     FreezingBoilingPoints temp1 = new FreezingBoilingPoints(0); 

     Scanner scan = new Scanner(System.in); 
     System.out.println("Please enter a temperature: "); 
     temperature = scan.nextInt(); 

     System.out.println(showTempinfo()); 
    } 
} 

答えて

1

1)メンバー変数にすでにこの値があるため、tempメソッドを渡さないでください。

2)(条件)場合には、真のそれ以外の場合はfalseリターン(条件)に変更することができますし、それだけで読みやすくするために、同じ結果になります。

3)ラッパーが必要になるまでブール型のラッパーを返さないでください。

public final class FreezingBoilingPoints { 

    private int temperature; 

    public FreezingBoilingPoints(int temp) { 
     temperature = temp; 
    } 

    public void setTemperature(int temp) { 
     temperature = temp; 
    } 

    public int getTemperature() { 
     return temperature; 
    } 

    private boolean isEthylFreezing() { 
     return (temperature <= -173); 
    } 

    private boolean isEthylBoiling() { 
     return (temperature >= 172); 
    } 

    private boolean isOxygenFreezing() { 
     return (temperature <= -362); 
    } 

    private boolean isOxygenBoiling() { 
     return (temperature >= -306); 
    } 

    private boolean isWaterFreezing() { 
     return (temperature <= 32) ; 
    } 

    private boolean isWaterBoiling() { 
     return (temperature >= 212); 
    } 

    public String showTempinfo() { 
     StringBuilder result = new StringBuilder(); 

     if (isEthylFreezing()) { 
      result.append("Ethyl will freeze"); 
      result.append("\n"); 
     } 

     if (isEthylBoiling()) { 
      result.append("Etheyl will boil"); 
      result.append("\n"); 
     } 

     if (isOxygenFreezing()) { 
      result.append("Oxygen will freeze"); 
      result.append("\n"); 
     } 

     if (isOxygenBoiling()) { 
      result.append("Oxygen will Boil"); 
      result.append("\n"); 
     } 

     if (isWaterFreezing()) { 
      result.append("Water will freeze"); 
      result.append("\n"); 
     } 

     if (isWaterBoiling()) { 
      result.append("Water will boil"); 
      result.append("\n"); 
     } 

     return result.toString(); 
    } 
} 

メイン:

import java.util.Scanner; 

public class FreezingBoilingTester 
{ 
    public static void main(String[] args) 
    { 

    Scanner scan = new Scanner(System.in); 
    System.out.println("Please enter a temperature: "); 
    int temperature = scan.nextInt(); 

    FreezingBoilingPoints temp1 = new FreezingBoilingPoints(temperature); 
    System.out.println(temp1.showTempinfo()); 
    } 
} 

更新: あなたは文字列の連結を使用することができます

String result = ""; 

if (condition) { 
    result += "new result"; 
    result += "\n"; 
} 

をしかし、それぞれ+ =操作がするので、これは、パフォーマンスの用語には推奨されません新しい結果を保持するメモリ内に別のStringオブジェクトを作成します。

+0

あなたが実際に私を最も助けてくれましたが、私たちはまだそれを学んでいないので私のプログラムでStringBuilderメソッドを使用することはできません。文字列作成ツールを使用せずに返す方法を教えてください。 – Andrew

+0

更新された回答を確認してください。とにかく現実世界でこれをしないでください:) –

0

問題は、あなたのプライベートメソッドがtemperatureに取っていると、まだ、あなたは1を渡していないことですあなたのshowTempinfo()メソッドのために。入力パラメータを削除し、クラスにtempセットを使用してみてください。またに電話する前に、何とかtempを設定する必要があります。

これが役に立ちます。

0

showTempinfo()には、isEthylFreezing()を実行しようとしています。

しかし、それは働くことができない... isEthylFreezingはint型を待っている...しかし、それは何も得ない...

+0

public string showTempinfo()は、「不正な式の開始」と、セミコロンが必要であることを示します。それらは私が今得ている唯一のエラーです – Andrew

0

あなたは、ユーザーがのコンストラクタにあなたを与えているという入力を渡していませんあなたのFreezingBoilingPointsクラス。そのクラスを0で初期化してから、ユーザーからの温度を求めています。ユーザーが提供した温度と、それをテストするために使用しているクラスとは関係がありません。

0

メインメソッドでFreezingBoilingPointsオブジェクトを構築してから、showTempinfo()を呼び出す必要があります。また、あなたのプライベートcalcメソッドは、メンバ変数を使用する必要があります。それをパラメータとして取る必要はありません。

0

ユーザー入力temperatureFreezingBoilingPointsコンストラクタに渡す必要があります。また、メソッドshowTempInfo()はインスタンス固有です。

1)すべてのあなたの「です...」方法がために期待している:たとえば、あなたはここでtemp1.showTempInfo()

0

を起動し、その後、コンストラクタでユーザー入力を渡すことによって、我々は行く、temp1、あなたのオブジェクトをインスタンス化する必要がありますintパラメータですが、呼び出しているときは何も渡していません。メソッドの実装のいずれかからint型のパラメータを削除するか、方法は

2を呼び出す)あなたは、メソッドのisWaterBoiling締切ブラケットを逃しています。

3) "showTempinfo"メソッドをStringを返すとしてマークしましたが、そのメソッドに対して何も返されていません。 returnコマンドを追加するか、メソッドシグネチャから "String"を削除します。

関連する問題