2017-01-27 21 views
0

私は、以下の条件を受け入れるプログラムを記述する必要があります。Javaの桁数が奇数であることを確認する方法は?

  1. それが奇数である必要があり、
  2. 、桁数が奇数を持ってその数字の全てが奇数でなければなりませんそして
  3. 数は、私は現在、それは桁数が奇数を持っているかどうかを確認しようとする上で立ち往生しています

101の間と1000001.なければなりません。どんな助けもありがとう。 更新:すべての皆さん、ありがとうございます。本当に役に立ちました!

import java.util.Scanner; 
public class TestOddNumbers { 

public static void main(String[] args) { 

    Scanner stdin = new Scanner(System.in); 
    int userInput; 
    final int EXIT = -1; 
    final int MIN = 101; 
    final int MAX = 1000001; 
    do{ 
     System.out.println("please enter a positive whole number between" 
       + "" + MIN + " and " + MAX + ". Enter " + EXIT + " " 
       + "when you are done entering numbers."); 
     userInput = stdin.nextInt();  
    } 
    while(userInput != EXIT && userInput >= MIN && userInput <= MAX); 
    if(userInput % 2 == 1){ 
      System.out.println("This is an odd number"); 
     } 
     else{ 
      System.out.println("This is not an odd number"); 
     } 
     } 
    }   
} 
+1

最初のルールは冗長です。 – shmosel

+4

[intの桁数を取得する方法]の複製がありますか?(http://stackoverflow.com/questions/1306727/way-to-get-number-of-digits-in-an-int) – shmosel

+0

if *すべての数字は奇数でなければなりません*最後の桁が奇数になると数字が奇数になります –

答えて

0

これはいかがですか?

この疑似コードは、解決策でも解決策でもありません。

//this should probably be outside and before your while loop. 
int length = Integer.toString(userInput).length(); 
if (length % 2 == 0) { 
    return false; //even number of digits 
} 

...

//this should be inside your while loop 
while(userInput != 0) { 
    remainder = userInput % 10; 
    userInput = userInput/10; 
    if (remainder % 2 != 0) { 
    return false; //One of the digit is even 
    } 
    //if every digit is odd, it has to be an odd number, so checking if origina userInput is an odd number is not necessary. 
} 

出発点として、この擬似コードを取ります。

0

userInputの値を文字列に渡し、長さが奇数であるかどうかを調べます。

String total = ""; 

do{ 
     System.out.println("please enter a positive whole number between" 
       + "" + MIN + " and " + MAX + ". Enter " + EXIT + " " 
       + "when you are done entering numbers."); 
     userInput = stdin.nextInt(); 
     total += String.valueOf(userInput); 
    } 
    while(userInput != EXIT && userInput >= MIN && userInput <= MAX); 
    System.out.println(total); 
    if(total.length() % 2 == 1){ 
      System.out.println("This is an odd number"); 
     } 
     else{ 
      System.out.println("This is not an odd number"); 
     } 
-1

お客様のニーズをすべて満たすソリューションをご確認ください。あなたが入力した方法でさえ、修正する必要がありました。各桁が奇数であり、長さも奇数である場合もあれば

public static void main(String[] args) { 
    Scanner stdin = new Scanner(System.in); 
    int userInput; 
    final int EXIT = -1; 
    final int MIN = 101; 
    final int MAX = 1000001; 
    do { 
     System.out.println("please enter a positive whole number between" 
       + "" + MIN + " and " + MAX + ". Enter " + EXIT + " " 
       + "when you are done entering numbers."); 
     userInput = stdin.nextInt(); 

     if(userInput==EXIT){ 
      System.out.println("done"); 
      break; 
     } 

     if (userInput % 2 == 1) { 
      System.out.println("This is an odd number"); 
     } else { 
      System.out.println("This is not an odd number"); 
     } 

     if(String.valueOf(userInput).length()%2==1){ 
      System.out.println("Has odd number of digits"); 
     } else { 
      System.out.println("Has even number of digits"); 
     } 
     boolean[] allOdds = {true}; 

     String.valueOf(userInput).chars().forEach(i -> { 
      if(Integer.parseInt(String.valueOf((char)i))%2==0){ 
       allOdds[0] = false; 
      } 
     }); 
     if(allOdds[0]){ 
      System.out.println("all digits are odds"); 
     }else{ 
      System.out.println("all digits are not odds"); 
     } 

    } while (userInput >= MIN && userInput <= MAX); 
} 
+0

なぜallOddsに1つの要素の配列がありますか? –

+0

'allOdds'はローカル変数であり、ラムダの内部で使用されています。ラムダは本質的に匿名のクラスを表し、ローカル変数が直接使用されている場合、最終的にまたは効果的に最終的であることを示すエラーをスローします。 –

+0

ここでも同様の使い方を見つけることができます - http://stackoverflow.com/a/26163920/3940047 –

0

コードのこの部分は、チェックされます。

int test = 6789; 
    int a = test; 
    int length =0; 
    boolean hasEachDigitOdd = true; 
    while (a!= 0) { 
     int remaider = a % 10; 
     if (remaider % 2 == 0) { 
      hasEachDigitOdd = false; 
     } 
     a = a/10; 
     length++; 
    } 
    System.out.println(length); 
    System.out.println(hasEachDigitOdd); 
0
if (num >= 101 && num <= 1000001 && num % 2 == 0) 

%記号はあなたの除算の余りを与えます。

関連する問題