2016-10-21 6 views
0

Разработка и внедрение приложения, которое определяет и печатает количество четных, нечетных и нулевых цифр в значении int, считываемом с клавиатуры.Нужна помощь с циклом while, чтобы заставить работу печати работать

Пример:

Enter a number: 100504575 
The number: 100504575 has 3 zeros, 1 evens, and 5 odds. 

поэтому код говорит, чтобы ввести номер, то он будет считать, сколько эвены шансы и нули, то он будет печатать этот номер еще раз и сказать, сколько эвенов шансы и нули есть. счетная часть работает, я просто не могу заставить num часть работать в этом заявлении печати. если я ввел номер 1384932, он должен распечатать обратно: Номер: имеет 0 нулей, 3 эвенса и 4 коэффициента. в настоящее время распечатывается: Номер: имеет 0 нулей, 3 эвенса и 4 коэффициента.

System.out.print ("Номер:" + Num + "имеет" ноль + + "нулей," + четное + "сглаживает" + "и" нечетные + "форы") ;

import java.util.Scanner; 

public class CountDigits { 

    public static void main(String[] args) { 
     //Scanner scan = new Scanner(System.in); 

     Scanner Scan = new Scanner(System.in); 
     int even =0, odd = 0, zero = 0; 
     System.out.print ("Enter a number: "); 
     int num = Scan.nextInt(); 
     while(num > 0) { 
      int digit = num % 10; 
      num /= 10; 
      if(digit == 0) { 
      zero++; 
      } else if(digit % 2 == 0) { 
       even++; 
      } else { 
       odd++; 
      } 
     } 
     System.out.print("The number: " + num + " has " + zero + " zeros, " 
       + even + " evens, " + "and " + odd + " odds."); 
     Scan.close(); 
    } 
} 
+0

Пожалуйста, добавьте язык как тег – Pikamander2

+0

Вы никогда не завершаете цикл, потому что 'num' всегда'> 0', если вы не ввели '0'. Пойдите с ответом @ChiefTwoPencils, чтобы изменить это. Но я добавил и другой способ подумать об этом. –

+0

yes @ChiefTwoPencils – codingisntmyfavorite

ответ

1

num будет 0, так что ваше сторожевое значение, чтобы остановить цикл. Нет проблем, просто скопируйте ввод в другую переменную, которая будет использоваться в цикле while.

int num = Scan.nextInt(); 
int looper = num; 
while (looper > 0) { ... } 

Таким образом num сохраняет значение, принятое с Scanner, а другой представляет собой один изменяется во время цикла. Конечно, вам нужно будет реорганизовать все экземпляры num на looper внутри петли while. Вы можете сделать это с помощью Replace All очень легко.

+0

Это то, чего я отсутствовал, спасибо за вашу помощь! это имеет смысл сейчас – codingisntmyfavorite

0

Я редактировал свой код, чтобы использовать String, так что вы можете войти в столько символов, сколько вы хотите без того, чтобы беспокоиться о int ограничений.

Я использовал int[] с размером 3 для подсчета нулей, nums[0], шансы, nums[1] и эвенов. nums[2].

Он вводит введенный номер, обрезает любые пробелы и анализирует digit с использованием charAt(). Затем он проверяет.

Пусть это будет известно, предполагается, что будут введены только целые числа, пробелы или буквы или специальные символы.

public static void main(String[] args) { 
    Scanner Scan = new Scanner(System.in); 
    int[] nums = new int[3]; 
    System.out.print ("Enter a number: "); 
    String num = Scan.nextLine(); 
    num = num.trim(); 
    for(int i = 0; i < num.length(); i++){ 
     int digit = Integer.parseInt("" + num.charAt(i)); 
     if(digit == 0){ 
      nums[0]++; 
     }else if(digit % 2 == 0){ 
      nums[2]++; 
     }else{ 
      nums[1]++; 
     } 
    } 
    System.out.print("The number: " + num + " has " + nums[0] + " zeros, " 

      + nums[2] + " evens, " + "and " + nums[1] + " odds."); 
    Scan.close(); 
} 
+0

как вы написали, что в считанные минуты я никогда не пойму ... спасибо за вашу помощь – codingisntmyfavorite

+0

Я делал это раньше. Если вы хотите сохранить свой способ сделать это, что работает, используйте ответ @ChiefTwoPencils. Он затрагивает ваш основной вопрос, где мой ответ - это просто другое мышление. –