循环,初学者

时间:2013-09-02 21:49:14

标签: java loops

您好,我是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?

10 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

我不会给你完整的解决方案,但是你需要知道的事情是正确的,如果你理解它们,问题就变得非常简单了:

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

String s = String.valueOf(k);

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

逐个迭代字符
char c = s.charAt(0);

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

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

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

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

答案 2 :(得分: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;
}

答案 3 :(得分: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);
    }  
}

答案 4 :(得分:1)

这就是我提出的:

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);




}
}

首先,您从用户那里获得号码,然后程序遍历字符串(数字)中的每个数字并将它们分开。这由变量&#34; a&#34;表示。现在,您可以通过使用模数除法来测试a以查看数字是否均匀(如果%2不是0,则a不是偶数)。最后,将偶数与总变量一起添加,它将显示答案!

答案 5 :(得分: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;
 }

答案 6 :(得分: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;
    }
}

答案 7 :(得分: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);
        }

答案 8 :(得分: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为正数时才有效。

答案 9 :(得分: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);
    }
}