2015-10-20 34 views
1

我需要找到用戶輸入數字字符串的所有奇數的總和。例如,如果輸入是12235,則總和將是1 + 3 + 5 = 9如何查找用戶輸入數字字符串的所有奇數的總和?

這是我的代碼看起來像到目前爲止:

import javax.swing.JOptionPane; 
public class sumOfAllOddDigits 
{ 
    public static void main(String[]args) 
    { 
     int a; 
     int sum = 0; 
     String userinput; 

     userinput = JOptionPane.showInputDialog("Enter a number. " , null); 

     a = Integer.parseInt(userinput); 

     for (int i = 0; i <= a; i++) 
     { 
      if (i % 2 == 1) 
      { 
       sum += i; 

      } 

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

總和始終打印大量,但我不知道如何讓它打印正確的數字。請幫忙。謝謝。

+2

我想你不到這裏使用正確的邏輯。嘗試在編碼之前在紙張上寫入邏輯處理 –

+1

'sum = userinput.chars()。map(c - > c-'0')。filter(d - > d%2 == 1).sum()' – aioobe

+0

可能的重複http://stackoverflow.com/questions/3389264/how-to-get-the-separate-digits-of-an-int-number –

回答

1

您可以按字符檢查字符串,如果當前字符表示奇數,則將其添加到運行總和中。最初你只是找到0和用戶輸入的數字之間的奇數之和,那顯然是不正確的。

userinput = JOptionPane.showInputDialog("Enter a number. " , null); 
for (int i = 0; i < userInput.length(); i++) 
{ 
    char c = userInput.charAt(i); 
    if ((c-'0') % 2 == 1) 
    { 
     sum += (c-'0'); 
    } 
} 
System.out.println(sum); 

對人物做算術另一種方法是使用Character.digit(char, 10)它更易於閱讀,更安全,且不易出錯。

+1

'Character.digit(c,10)'是一種更容易閱讀的方式來獲取數字值。 –

+0

你是對的,它絕對更清潔,也更不容易出錯。我會更新我的答案。 – turingcomplete

+0

我喜歡這個解決方案..謝謝 –

3

你做錯了。

您不添加數字,但是所有的整數都在0和它之間。

您直接使用userInput,重複從0到userInput.length(),並使用Integer.parseInt("" + userInput.charAt(i))解析當前數字。

除此之外,過程是相同的。

+0

'Character.digit(userInput.charAt(i),10)'會更好:'Integer.parseInt'需要一個字符串,而不是字符。 –

+0

您也可以使用轉換hack:「」+ charAt。儘管更新答案。 – Victor

+0

'「」+ charAt'創建一個不必要的字符串。 –

3

現在您可以找到0和您輸入的數字之間的所有奇數的總和。

相反,您需要從輸入號碼中獲取每個單獨的數字。解決方案可以在這裏找到 - How to get the separate digits of an int number?

然後,對於每個數字,如果數字是奇數,則將其添加到運行總和。

1

有這樣使用Java 8流的一個很好的方式:

int sumOdds = userInput.chars().map(n -> n - '0').filter(n -> n % 2 == 1).sum(); 
相關問題