好的,我的目标是完成以下任务:
"设计并实现一个应用程序,用于确定并打印从键盘读取的整数值中的奇数,偶数和零数字的数量。
提供标签,标签和输出:您的代码根本不应该有任何提示。该程序的输入是一个整数。读取整数后,输出由三行组成。第一行包括整数中的奇数位数,后跟标签"奇数位"。第二行包括整数后面的偶数位数,后跟标签"偶数"。第三行包括整数中的零位数,后跟标签"零位"。例如,如果读入173048,则输出将为: 3个奇数位 3个偶数位 1个零位数 名称规范:您的申请类应称为DigitAnalyst"
我制作的代码是:
import java.util.Scanner;
public class DigitAnalyst{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String num = scan.next();
int odd_count = 0;
int even_count = 0;
int zero_count = 0;
//input an int as a string, and set counter variables
int[] num_array = new int[num.length()];
//ready a array so we can so we can parse it sanely
for (int i =0; i < num.length(); i++)
{
num_array[i] = num.charAt(i);
}//fill the array with the values in the initial number using a loop
for ( int i=0;i< num_array.length; i++)
{
if (num_array[i] % 2 ==0)
{
if (num_array[i] ==0 )//the hell is going on here?
{
zero_count++;
}
else if (num_array[i] != 0)
{
even_count++;
}
}
else if (num_array[i] % 2 != 0)
{
odd_count++;
}
}//use this loop to check each part of the array
System.out.println(odd_count+ " odd digits");
System.out.println(even_count+" even digits");
System.out.println(zero_count+" zero digits");
}
}
然而我一直得到错误的输出。更具体地说,它返回正确数量的奇数,但它仍然将0计为偶数而不是零。
我知道问题出在哪里,但我不知道出了什么问题,我已经花了几个小时的时间。 如果有人能指出我正确的方向,我就会变得不稳定。
答案 0 :(得分:1)
如果为num.charAt(i)
分配整数元素,则会分配字符的ASCII值,结果会出错。为了解决这个问题,请更改
num_array[i] = num.charAt(i);
到
num_array[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
或类似的。
答案 1 :(得分:1)
当遇到涉及操作整数中数字的问题时,标准方法是使用实际整数和运算符%
,而不是字符串。而不是scan.next()
使用
int num = scan.nextInt();
然后你可以这样做:
do {
int digit = num % 10;
if ( digit == 0 ) {
zero_count ++;
} else if ( digit % 2 == 0 ) {
even_count ++;
} else {
odd_count ++;
}
num /= 10;
} while ( num > 0 );
这个想法是,当你将数字除以10时,余数恰好是最右边的数字,并且商将包含所有其他数字。这就是十进制系统的工作原理。
在这种方法中,您可以直接获取数字而无需调用任何方法,并且您不需要任何数组。
答案 2 :(得分:0)
我会在这里给你一些帮助。首先,charAt()
返回字符串中索引处的字符,作为char
数据类型。您将存储在ints
数组中,该数组假定集合中字符的数值,而不是实际值。
试试这个......
更改:
int[] num_array = new int[num.length()];
为:
char[] num_array = new char[num.length()];
并使用以下内容包装您的条件中的所有num_array[i]
个引用:
Character.getNumericValue(num_array[i])
你应该得到预期的结果。
Input = 12340
Output =
2 odd digits
2 even digits
1 zero digits