您好,我是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?
答案 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);
}
}