将数组元素与零进行比较?

时间:2014-10-11 21:35:30

标签: java arrays conditional-statements

好的,我的目标是完成以下任务:

"设计并实现一个应用程序,用于确定并打印从键盘读取的整数值中的奇数,偶数和零数字的数量。

提供标签,标签和输出:您的代码根本不应该有任何提示。该程序的输入是一个整数。读取整数后,输出由三行组成。第一行包括整数中的奇数位数,后跟标签"奇数位"。第二行包括整数后面的偶数位数,后跟标签"偶数"。第三行包括整数中的零位数,后跟标签"零位"。例如,如果读入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计为偶数而不是零。

我知道问题出在哪里,但我不知道出了什么问题,我已经花了几个小时的时间。 如果有人能指出我正确的方向,我就会变得不稳定。

3 个答案:

答案 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