1

基本的に、ユーザー入力を2^31 -1整数の形式で受け取り、奇数、偶数、ゼロの数を int で返すプログラムを作成する必要があります。例えば、

Input: 100
Output: 1 Odd, 0 Even, 2 Zeros // 1(Odd)0(Zero)0(Zero)

また

Input: 2034
Output: 1 Odd, 2 Even, 1 Zero // 2(Even)0(Zero)3(Odd)4(Even)

私はそれを考えすぎていると確信していますが、頭の回転を遅くすることはできません。誰でも助けることができますか?これはコードの 3 回目の繰り返しで、最初の 2 回は for ループで試行されました。

import java.util.Scanner;

 public class oddEvenZero
 {
    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);
        int value;
        int evenCount = 0, oddCount = 0, zeroCount = 0;

        System.out.print("Enter an integer: ");
        value = scan.nextInt();

        while (value > 0) {

        value = value % 10;

        if (value==0) 
        {
           zeroCount++;
        }
        else if (value%2==0) 
        {
           evenCount++;
        }
        else 
        { 
           oddCount++;
        }
        value = value / 10;
    }
    System.out.println(); 
    System.out.printf("Even: %d Odd: %d Zero: %d", evenCount, oddCount, zeroCount);
 }
}

申し訳ありませんが、コードはテキスト ボックスで奇妙にフォーマットされています。

4

4 に答える 4

2
 value = value % 10;

おそらく、あなたの問題はすべて終わりです。

valueがの場合2034、 ... をvalue % 10返し4、その値を に割り当てます。ブロックvalueを通過し、getを実行して、他の 3 桁をアドレス指定せずにを終了します。if else4/100while loop

次のようなものをお勧めします。

while (value > 0) {

    if ((value%10)==0) {
       zeroCount++;
    }
    else if (value%2==0) { //As per comment below...
       evenCount++;
    }
    else { 
       oddCount++;
    }

    value /= 10;
}

または、 、次に現在のブロックをint thisDigit = value % 10に置き換えます。valueif elsethisDigit

于 2013-10-02T03:25:40.553 に答える
0

java.util.Scanner をインポートします。

パブリッククラスodEvenZero {

 public int[] convertStringArraytoIntArray(String[] sarray) throws Exception {


     if (sarray != null) 
        {
            int k= sarray.length-1;
            int intarray[] = new int[k];

                for (int i = 1; i < sarray.length; i++) {

                    intarray[i-1] = Integer.parseInt(sarray[i]);
                }

                return intarray;
        }
        return null;
        }


 public static void main(String[] args) {


    Scanner scan = new Scanner (System.in);

    String value;

    System.out.print("Enter an integer: ");

    value = scan.next();


    String words[] = value.split("");



    oddEvenZero obj = new oddEvenZero();

  try{

  int intarray[]=   obj.convertStringArraytoIntArray(words);

 int even_number =0;
 int odd_number =0;
 int zero_number =0;
  for (int h: intarray)
  {

      if(h==0)
      {
         zero_number++; 

      }
      else if(h%2==0)
      {

          even_number++;
      }

      else{

          odd_number++; 
      }
  }

 System.out.println("even numbers are"+ even_number);

 System.out.println("odd numbers are"+odd_number);
 System.out.println("Zero numbers are"+zero_number); 
  }


 catch(Exception ex)
 {

     System.out.println("Please enter number");



 }

}      

}

于 2013-10-02T15:00:23.483 に答える
0
value = value % 10;

valueこのステートメントは、オリジナルをリマインダーで上書きしますvalue % 10

value = 2034と の場合value % 10 = 4value = 4これはあなたが望むものではありません。

代わりに一時変数を使用します

int lastDigit = value % 10;

次に、コードは次のようになります。

while (value > 0) {

    int lastDigit = value % 10;

    if (lastDigit==0) 
    {
       zeroCount++;
    }
    else if (lastDigit%2==0) 
    {
       evenCount++;
    }
    else 
    { 
       oddCount++;
    }
    value = value / 10;
}
于 2013-10-02T03:28:24.673 に答える