我试着编写一个简单的java程序来计算一个数字中有多少个奇数(例如,对于输入" 123"程序应该返回2)。程序改为返回给定数字的所有数字。有什么想法吗?
import java.util.*;
//Counts the number of odd digits in an int using recursion
public class OddCount{
public static void main(String[]args){
Scanner in = new Scanner(System.in);
System.out.println("Digit a positive int number: ");
int n = in.nextInt();
System.out.println("The number of odd digits is " + oddDigitCounter(n));
}
public static int oddDigitCounter(int number) {
int result = 0;
if(number<=10){
if(number%2==0)
result = 0;
else
result++;
}
else{
if(number%10!=0){
if((number%10)/2!=0)
result = 1 + oddDigitCounter(number/10);
else
result = 0 + oddDigitCounter(number/10);
}
else{
result = 0 + oddDigitCounter(number/10);
}
}
return result;
}
}
答案 0 :(得分:5)
这是一种在没有所有不必要条件的情况下编写递归方法的方法。
public static int oddDigitCounter(int number) {
if (number==0) {
return 0;
}
return (number&1) + oddDigitCounter(number/10);
}
使用&1
代替%2
可以使其适用于负数和正数。
答案 1 :(得分:1)
检查你的代码,你在这个if条件中使用/而不是%:
if((number%10)/2!=0)
应该是:
if((number%10)%2!=0)
答案 2 :(得分:0)
在oddDigitCounter()中,为什么不简单地逐位检查它是偶数还是奇数并回显(存储)结果?
递归方法:在第一次调用时你可以将整个数字传递给函数,然后如果数字长度为1位,让函数进行检查并返回,其他的则检查第1位数字并再次传递给其他数字功能本身。
程序方法:在数字上做一个简单的循环并进行检查。
答案 3 :(得分:0)
您可以使用以下示例:
import java.util.Scanner;
public class NumberOfOddDigist {
private static int count = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Digit a positive int number: ");
int n = in.nextInt();
countOdd(n);
System.out.println("The number of odd digits is " + count);
in.close();
}
public static void countOdd(int number) {
int remainder = number % 10;
int quotient = (number - remainder) / 10;
if (!(remainder % 2 == 0)) {
count++;
}
number = quotient;
if (number < 10) {
if (!(number % 2 == 0)) {
count++;
}
} else {
countOdd(number);
}
}
}
答案 4 :(得分:-1)
您可以使用Stream
对迭代和过滤非常有用,例如:
public static int oddDigitCounter(int number) {
long result = 0;
String numb = ""+number;
result = numb.chars().filter(val -> val%2==1).count();
return Math.toIntExact(result);
}
在这里你创建一个String
号码,它允许迭代它,然后你filter
只保留奇数号码,然后你count
你得到多少。由于Steam的result
方法原因,long
必须属于count()
类型
如果删除所有变量,可以在一行 中删除
public static int oddDigitCounter(int number) {
return Math.toIntExact(String.valueOf(number).chars().filter(val -> val%2==1).count());
}
如果您对此感觉不满意,可以采用更通用的方式:
public static int oddDigitCounter(int number) {
int result = 0;
String numb = ""+number;
for(int i=0;i<numb.length();i++){
if(numb.charAt(i)%2==1){
result++;
}
}
return result;
}
我希望一切都有用