2017-10-18 84 views
0

不是最好的冠軍,但基本上我想問用戶輸入的溫度,然後顯示的,將在該溫度下凍結和那些沸騰在該溫度下物質的清單。我希望它在一個while循環中,我希望用戶能夠去,直到他們想停下來。繼承人什麼我到目前爲止,我的第一類,然後測試儀設置while語句以打印出方法?

public class FreezingPoint { 

    private int temperature; 

    public double getTemperature() { 
     return temperature; 
    } 

    public void setTemperature() { 
     this.temperature = temperature; 
    } 

    public boolean isEthylFreezing() { 
     boolean status; 

     if (temperature <= -173.0) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 

    public boolean isEthylBoiling() { 
     boolean status; 

     if (temperature >= 172.0) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 

    public boolean isOxygenFreezing() { 
     boolean status; 

     if (temperature <= -362.0) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 

    public boolean isOxygenBoiling() { 
     boolean status; 

     if (temperature >= -306.0) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 

    public boolean isWaterFreezing() { 
     boolean status; 

     if (temperature <= 32) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 

    public boolean isWaterBoiling() { 
     boolean status; 

     if (temperature >= 212) 
      status = true; 
     else 
      status = false; 

     return status; 
    } 
} 

現在測試類

import java.util.Scanner; 

public class TestFreezingPoint { 

    public static void main(String[] args) { 
     FreezingPoint fp = new FreezingPoint(); 
     double temperature; 
     Scanner sc = new Scanner(System.in); 
     System.out.println("please enter a temp"); 
     temperature = sc.nextDouble(); 
     System.out.println("Is Water Freezing?" + fp.isWaterFreezing()); 
    } 
} 

我的問題是,代碼不能正常工作,我很困惑,從這往哪兒走。我知道如何設置while循環以及如何使它停止,直到我想停止,但我不確定如何正確打印將根據用戶輸入的溫度顯示的物質列表

任何幫助表示讚賞,相當新的Java和一直停留在這一段時間

感謝

+0

工作不正常?怎麼回事,你的錯誤是什麼? – Steampunkery

+1

你有很多無用的在你的方法,減少這樣的:'公佈爾isEthylBoiling(){回水溫度> = 172.0; }'爲每一個 – azro

+0

我的眼睛可能是弱,但在你的'main'方法,你讀的溫度,但你不把它分配給你的'FreezingPoint'。此外,作爲azro答案表明,我想你會重新設計了一下你的類,並考慮'Substance'與臨界溫度的對象屬性 – Al1

回答

1

我覺得如果事情癤或在一定溫度下凍結你應該使用測試不同的方式。在你的例子中,你必須爲每種物質添加兩種方法,然後找到一種方法來循環它們。

這可能會是一個容易得多,如果你使用的例如列表,然後使用一個開關()語句只是物質添加到煮沸或給定溫度下凍結名單。如果您創建了一個方法並將溫度作爲參數並將其作爲參數返回,您可以輕鬆地遍歷列表並打印出每個元素。

我做了一個簡單的例子給你:

public List<String> getSubstances(int temperature){ 

    List<String> substances = new ArrayList<String>(); 

    switch(temperature){ 

     case 0: 
      substances.add("Water"); 

     case 100: 
      substances.add("Water"); 


    } 

    return substances; 

} 

這將是一個比較容易的方式解決,你可以在列表中很容易循環打印出來。

+0

如果你看看OP的支票,你會發現他並沒有使用平等,而是比較。因此,他不是在尋找臨界溫度,而是在給定溫度的情況下,水,氧氣等的狀態如何。因此,「開關」不會。例如,如果輸入是「150」(攝氏度),你的輸出是什麼? – Al1

+0

我明白你的意思了。對不起,沒有意識到。無論如何,創建一個if語句,比如if(0 XPModder

1

我建議使用一個類來表示的物質:

public class Substance { 

    private String name; 
    private double tempFreeze; 
    private double tempBoil; 

    public Substance(String name, double tempFreeze, double tempBoil) { 
     this.name = name; 
     this.tempFreeze = tempFreeze; 
     this.tempBoil = tempBoil; 
    } 

    public double getTempBoil() {  return tempBoil; } 
    public double getTempFreeze() { return tempFreeze; } 
    public String getName() {  return name; } 

    public String getState(double temp) { 
     if (temp <= tempFreeze) { 
      return "freeze"; 
     } else if (temp >= tempBoil) { 
      return "boil"; 
     } 
     return "liquid"; 
    } 
} 

要被使用,如:

public static void main(String[] args) { 
    List<Substance> list = new ArrayList<>(); 
    list.add(new Substance("ethyl", -173, 172)); 
    list.add(new Substance("Oxygen", -362, -306)); 
    list.add(new Substance("water", 32, 212)); 

    Scanner sc = new Scanner(System.in); 
    do { 
     System.out.println("please enter a temp"); 
     double temperature = sc.nextDouble(); 
     sc.nextLine();     //consume return char 

     for (Substance s : list) { 
      System.out.println(s.getName() + " is in state : " + s.getState(temperature)); 
     } 

     System.out.println("\nDo you want to stop ? Write 'yes' to stop"); 
    } while (!sc.nextLine().contains("y")); 
} 

執行例如:

please enter a temp 
125 
ethyl is in state : liquid 
Oxygen is in state : boil 
water is in state : liquid 

Do you want to stop ? Write 'yes' to stop 
y 
+0

如果我想挑剔/討厭,我可以知道你爲什麼選擇這個設計爲'getState(double)'方法而不是基本的'if ... else if else'嗎?。 Upvote爲班級的建議:) – Al1

+0

@ Al1因爲我「喜歡」三元^^但我改變了,這種方式更容易理解 – azro