2014-07-02 27 views
0

我必須編寫一個程序來轉換線性單位in,ft,mi,mm,cm,m,km。我知道有更簡單更好的方法來做到這一點。我認爲我們只是試圖完全理解,如果陳述。但這是迄今爲止我所擁有的。我只是想弄清楚我是否在正確的軌道上。我試圖寫出一些僞代碼,但它看起來像很多,所以我覺得它有點壓倒性。接下來,我將添加一種方法將窗體或mm轉換爲用戶選擇的任何內容。使用if語句轉換單位?

當我測試程序,我得到這個:UnitConversion @ 76c5a2f7(編輯:這個問題是固定的) 好吧,我做了建議的更改,並允許程序的第一部分正常運行。我現在已經添加了第二種方法來將in/mm轉換爲其他測量值。我遇到了問題,但我已經找到了答案。

這是我的主要方法;

public class LinearConversion 
{ 
    public static void main(String[] args) 
    { 
     UnitConversion newConvert = new UnitConversion("km", "m", 100); 

     System.out.println(newConvert); 
    } 
} 

有什麼建議嗎?我錯過了什麼或不瞭解做這種程序?

public class UnitConversion 
{ 

    private String input; 
    private String output; 
    private double value; 
    private double temp; 

    private double in, ft, mi, mm, cm, m, km; 
    private final double inch_feet = 12; 
    private final double inch_miles = 63360; 


    private final double inch_millimeters = 25.4; 
    private final double inch_centimeters = 2.54; 
    private final double inch_meters = 0.0254; 
    private final double inch_kilometers = 0.0000254; 

    private final double millimeters_inch = 0.0393701; 
    private final double millimeters_feet = 0.00328084; 
    private final double millimeters_miles = 0.000000622; 

    private final double millimeter_centimeters = 10; 
    private final double millimeter_meters = 1000; 
    private final double millimeter_kilometers = 1000000; 

    public UnitConversion(String in, String out, double val) 
    { 
     input = in; 
     output = out; 
     value = val; 
    } 

    public String toString() 
    { 
     if (input.equals("mi")) 
     { 
      in = value * inch_miles; 
      input = "in"; 
     } 

     else if (input.equals("ft")) 
     { 
      in = value * inch_feet; 
      input = "in"; 
     } 

     else 
     { 
      in = value; 
      input = "in"; 
     } 

     if (input.equals("km")) 
     { 
      mm = value * millimeter_kilometers; 
      input = "mm"; 
     } 

     else if (input.equals("m")) 
     { 
      mm = value * millimeter_meters; 
      input = "mm"; 
     } 

     else if (input.equals("cm")) 
     { 
      mm = value * millimeter_centimeters; 
      input = "mm"; 
     } 

     else 
     { 
      mm = value; 
      input = "mm"; 
     } 

     return value + input + " " + output; 
    } 

    public double getUnit() 
    { 
     if (input.equals("in")) 
     { 
      if (output.equals("ft")) 
      { 
       ft = in * inch_feet; 
       System.out.println(ft + "ft"); 
      } 
      else if (output.equals("mi")) 
      { 
       mi = in * inch_miles; 
       System.out.println(mi + "mi"); 
      } 
      else if (output.equals("mm")) 
      { 
       mm = in * inch_millimeters; 
       System.out.println(mm + "mm"); 
      } 
      else if (output.equals("cm")) 
      { 
       cm = in * inch_centimeters; 
       System.out.println(cm + "cm"); 
      } 
      else if (output.equals("m")) 
      { 
       m = in * inch_meters; 
       System.out.println(m + "m"); 
      } 
      else if (output.equals("km")) 
      { 
       km = in * inch_kilometers; 
       System.out.println(km + "km"); 
      } 
      else 
      { 
       System.out.println(in + "in"); 
      } 
     } 
     else 
     { 
      if (output.equals("cm")) 
      { 
       cm = mm * millimeter_centimeters; 
       System.out.println(cm + "cm"); 
      } 
      else if (output.equals("m")) 
      { 
       m = mm * millimeter_meters; 
       System.out.println(m + "m"); 
      } 
      else if (output.equals("km")) 
      { 
       km = mm * millimeter_kilometers; 
       System.out.println(km + "km"); 
      } 
      else if (output.equals("in")) 
      { 
       in = mm * millimeters_inch; 
       System.out.println(in + "in"); 
      } 
      else if (output.equals("ft")) 
      { 
       ft = mm * millimeters_feet; 
       System.out.println(ft + "ft"); 
      } 
      else if (output.equals("mi")) 
      { 
       mi = mm * millimeters_miles; 
       System.out.println(mi + "mi"); 
      } 
      else 
      { 
       System.out.println(mm + "mm"); 
      } 
     } 
} 
+0

我建議你使用'的System.out.println(newConvert.getInput())'代替:) – ccjmne

+0

考慮使用'之開關,而不是'如果...別的if'。查看[switch語句的Java教程](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html)。此外,作爲預防措施,將輸入轉換爲小寫。 – Barranka

+0

如果你使用枚舉,你也可以減少代碼的數量。您可以將字段添加到枚舉(要轉換爲一個單位的因子,例如米)。您可以將轉換寫爲單線,然後將這些因子與單位相關聯,而不是使用所有這些雙常數。 – fabian

回答

3

基本上,你需要/想給String參數System.out.println,以顯示它。

因此,當使用System.out.printlnObject(即不是String)作爲參數,爪哇實際輸出該對象上的toString方法的結果。

如果您還沒有覆蓋它,使用Object類的實現的toString:這是給你的輸出電流:[email protected]

要了解有關此默認toString實現如何生成String的更多信息,請參閱the javadoc entry for Object#toString

1

根據您的輸出和您提供的代碼,是的!重命名String getInput()String toString()和當前main()會工作,或更改當前main()

System.out.println(newConvert.getInput()); // <-- added .getInput()