2017-09-25 29 views
2

我是新來的java,我很困惑,爲什麼總變量不更新。當我打印它時,它只打印0的初始數字。此外,方法值基於羅馬字符返回數字。我忽略了班級線,但那不重要。我的總計不在我的循環中更新

public static void main(String[] args) 
{ 
    double total = 0; 
    String romanString = "MCMLXXVIII"; 
    double difference = 0; 


    while (romanString.length() > 0) 
    { 
     if (romanString.length() == 1 || value(romanString.substring(0, 1)) >= value(romanString.substring(1, 2))) 
     { 
      total = total + value(romanString.substring(0, 1)); 
      romanString = romanString.substring(1); 
     } 
     else 
     { 
      difference = value(romanString.substring(1, 2)) - value(romanString.substring(0, 1)); 
      total = total + difference; 
      romanString = romanString.substring(1); 

     } 
    System.out.println(total) 
    } 

} 

public static double value(String character) 
{ 
    if (character == "I") 
     return 1;  

    else if (character == "V") 
     return 5;  

    else if (character == "X") 
     return 10;  

    else if (character == "L") 
     return 50;  

    else if (character == "C") 
     return 100;  

    else if (character == "D") 
     return 500;  

    else if (character == "M") 
     return 1000; 

    return 0; 
} 

} 
+3

這是學習如何調試問題的最佳時機。要麼使用調試器,要麼在整個代碼中大量提供臨時println,以查看變量在運行時的功能。 –

+1

什麼是'value()'?這是你開發的一種方法嗎? –

+0

此代碼不完整。 'value()'函數在哪裏?最後'}'也沒有關閉。 – Arun

回答

3

字符串是一個對象,所以我覺得在你的value()方法,你將不得不使用.equals()避免比較存儲器地址。目前,與比較2個內存地址時一樣,==,value()將始終返回0

+0

你是對的!謝謝! – Bugaboo

0

所有的問題都來自你的valu()方法,我猜到了,其實最大的問題是,你ARA與==,而不是.equals()比較字符串,==比較僅與原始類型使用。

如果您使用.equals()或更好,如果您使用Switch語句而不是所有這些if語句進行比較,則可以擺脫此問題。

另一件事是,你用double爲您value()方法的返回類型,而這將是,如果你使用的int更好,因爲宇總是返回int值:1510501005001000

這是您應該怎樣value()方法下面這些技巧更新時間:

public static int value(String character){ 
    switch (character == "I"){ 
     case "I": 
     return 1;    
     case "V": 
     return 5;    
     case "X": 
     return 10;    
     case "L": 
     return 50;    
     case "C": 
     return 100;    
     case "D": 
     return 500;    
     case "M": 
     return 1000;    
     default: 
     return 0; 
} 

這將避免在你的代碼前面提到的問題,你也可以提高它更好地changingtheof字符from字符串to Char in your method as it will always hold a unique character along with using Sting.charAt(i)`得到相應的字符。

0

您應該使用equals而不是直接使用等號運算符==

除此之外,羅馬數字代表整數。改爲使用floating-point number(double is a floating-point number)並不是一個好習慣。

public class Roman 
{ 
    public static void main(String[] args) 
    { 
     int total = 0; 
     String romanString = "MCMLXXVIII"; 
     int difference = 0; 


     while (romanString.length() > 0) 
     { 
      if (romanString.length() == 1 || value(romanString.substring(0, 1)) >= value(romanString.substring(1, 2))) 
      { 
       total = total + value(romanString.substring(0, 1)); 
       romanString = romanString.substring(1); 
      } else 
      { 
       difference = value(romanString.substring(1, 2)) - value(romanString.substring(0, 1)); 
       total = total + difference; 
       romanString = romanString.substring(1); 

      } 
      System.out.println(total); 
     } 

    } 



    public static int value(String character) 
    { 
         if (character.equals("I")) 
         return 1; 

         else if (character.equals("V")) 
         return 5; 

         else if (character.equals("X")) 
         return 10; 

         else if (character.equals("L")) 
         return 50; 

         else if (character.equals("C")) 
         return 100; 

         else if (character.equals("D")) 
         return 500; 

         else if (character.equals("M")) 
         return 1000; 

         return 0; 
     } 


}