4

您好,我是 Java 初学者,有一个关于循环的问题,

书中的问题要求n的所有奇数之和。(例如,如果 n 为 32677,则总和将为 3+7+7=17。

我不太清楚如何编码,我正在寻找可以帮助我的人。我所拥有的是这段代码,第一步,但我不知道如何完成它或者我是否正确或错误。

任何帮助,将不胜感激,

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

        int n = 0;
        String value = String.valueOf(number);
        int length = value.length();

        while (n < length)
        {
            ... //Idk if this the right first step, how do I start it? where do i go?
4

11 回答 11

4

这段代码可以在不使用任何字符串的情况下达到目的:

int sum= 0;
int digit=0;
int number= your_value;
while ( number > 0 )
{
    digit=number % 10; // we look at the "last" digit 
    if ( digit %2 == 1 ) // odd digiti
    {
        sum+=digit;
    }
    number/=10;
}
于 2013-09-02T22:00:52.377 回答
3

我不会给你完整的解决方案,但这里有一些事情你需要知道才能正确地做到这一点,如果你理解了它们,问题就会变得非常简单:

如果你有一个整数 k,你可以将它转换为一个字符串:

String s = String.valueOf(k);

这将允许您更简单地遍历字符串的各个字符,这些字符代表数字的数字。然后你可以一个一个地遍历字符

char c = s.charAt(0);

其中 0 可以是一个循环索引变量,可以从第一个字符(索引 0)循环到最后一个字符(索引 s.length - 1 for String s)

然后将它们转换回整数,这很简单,然后检查它们是偶数还是奇数。执行此操作的标准方法是使用模数。

int k = 7;
if (k % 2 == 0) //k is even
else //k is odd

这是有效的,因为任何数字 mod 2 只有在它是偶数时才会返回 0。否则它将返回 1。

于 2013-09-02T21:52:53.230 回答
2

我写了评论以便更好地理解,尝试自己解决逻辑会更有帮助:)

public class SumOddMain {

    public static void main(String args[]) {
        String s = "1234";

        //Find the length of String
        int len = s.length();

        //Convert data type String into int
        int num = Integer.parseInt(s);

        int mod; //Modulus
        int od = 0, even = 0;

        for(int i = 0; i < len ; i++) {
            //Separates each digit from given number 
            mod = num % 10;  
            num = num / 10;

            if(mod % 2 == 0) { //Determines if the number is odd or even
                even = even + mod; //Addition of even numbers
            } else {
                od = od + mod; //Addition of odd numbers
            } 
        }
        System.out.println("Sum of even numbers is "+even);
        System.out.println("Sum of odd numbers is " + od);
    }  
}
于 2015-04-11T14:43:38.880 回答
2
public static int sumOfOddsInNumber(int n)
{
    String valueString = String.valueOf(n);
    int sum = 0;

    for (int i = 0; i < valueString.length(); i++)
    {
        int value = Integer.parseInt(valueString.substring(i, i + 1));
        if (value % 2 != 0)
            sum += value;
    }

    return sum;
}
于 2013-09-02T21:58:58.043 回答
1

This is what I came up with:

package sum;

import java.util.Scanner;
public class Sum {


   public static void main(String[] args) {
   Scanner input=new Scanner(System.in); 

   String number="";
   int a=0, total=0;
   boolean even=false;

  System.out.println("Enter a number"); number=input.nextLine();

  for (int counter=0; counter<number.length(); counter++){
    a=Integer.parseInt(number.substring(counter,counter+1));
     if (a%2!=0||a==1){
         even=false;
         total+=a;
     }
  }System.out.println("The sum is "+total);




}
}

First, you get the number from the user, then the program goes through each number in the string(number) and separates them. This is represented by the variable "a". Now you can test a to see if the number is even or not by using modulus division(if a%2 is not 0, a is not even). Finally, you add the even numbers together with the total variable, and it will display the answer!

于 2015-06-20T03:51:19.600 回答
1

对于这个问题,您可以将数字转换为字符串或使用 % 运算符获取最后一位数字。我将向您展示 % 方式:

int sum = 0;
while(n != 0){
    // Get the rightmost digit of n
    int i = n % 10;
    // take off the rightmost digit of n
    n /= 10;
    // If i is odd add it to sum
    if(i%2 != 0){
        sum += i;
    }
}
于 2021-05-27T03:05:11.950 回答
1

我认为最好的方法是使用 julien 发布的数字解决方案。

如果你想保留字符串,这里有另一种方法:

 String numString = String.valueOf(number);
 int tmp=0;
 int sum=0;
 for(int i; i< numString.length; i++) {
    tmp = Character.getNumericValue(element.charAt(i));
    if (tmp %2 != 0)
        sum+= tmp;
 }
于 2015-10-22T08:25:53.413 回答
0
public class SumOfOddsInNumber {
    public static void main(String[] args) {
        final int n = 32677;
        final String[] splittedIntString = Integer.toString(n).split("");
        int sum = 0;
        for (String s : splittedIntString) {
            final int selectedSToInt = Integer.parseInt(s);
            if (selectedSToInt % 2 != 0) sum += selectedSToInt;
        }
        System.out.printf("The sum of the odd digits in the number is: %d", sum);
    }
}
于 2020-08-05T11:08:22.793 回答
0

一种稍微有效的方法是使用按位运算符而不是 % 来查找数字是否为奇数。

int sum(int n) {
    int sum=0, rem;
    while(n>0) {
        rem = n%10;
        if (rem&1 == 1)
            sum+=rem;
        n/=10;
    }
    return sum;
}

但是请注意,此方法仅适用于输入n为正数的情况。

于 2015-09-03T17:16:45.763 回答
0
public int SumOfDigits(int num)
{
    if (num < 10) return num;
    return num % 10 + SumOfDigits(num / 10);
}

这不使用字符串,这是递归的(它是 c#,但我认为它也适用于 java,因为它们非常相似)

更新:

        public int SumOfOddDigits(int num)
        {
            int rem = num % 10;
            if (num < 10)
            {
                if (rem % 2 != 0)
                    return num;
                return 0;
            }
            if (rem % 2 != 0)
                return rem + SumOfOddDigits(num / 10);
            return SumOfOddDigits(num / 10);
        }
于 2015-08-29T17:52:13.317 回答
0
private static void calculateSumOfOddDigits(int number) {
    char[] numberArray = String.valueOf(number).toCharArray();

    int sum = 0;
    for (int i = 0; i < numberArray.length; i++) {
        if(numberArray[i] % 2 == 0) {
            sum += Integer.parseInt(String.valueOf(numberArray[i]));
        }
    }

    System.out.println(sum);
}
于 2021-11-03T15:19:11.337 回答