2015-10-31 4 views
2

Я пытаюсь напечатать каждую цифру целого числа, а затем сумму каждой цифры, как это. С петлями что-то не так, но я не могу понять это. Я хочу, чтобы это было так:Что случилось с моей петлей?

Please enter a number: 194 
1 * 100 = 100 
9 * 10 = 90 
4 * 1 = 4 
import java.util.Scanner; 
public class PrintEachDigits { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter the number: "); 
     int num = scan.nextInt(); 
     String s = ""+num; 
     double d = 0; 
     for(int i = 0; i < s.length(); i++) { 
      for(int j = s.length()-1; j >= 0; j--) { 
       d = Math.pow(10,j); 
       System.out.println(s.charAt(i) + " * " + d 
            + " = " + (s.charAt(i)*d)); 
      } 
     } 
    } 
} 

Это выход моего кода:

Enter the number: 194 
1 * 100.0 = 4900.0 
1 * 10.0 = 490.0 
1 * 1.0 = 49.0 
9 * 100.0 = 5700.0 
9 * 10.0 = 570.0 
9 * 1.0 = 57.0 
4 * 100.0 = 5200.0 
4 * 10.0 = 520.0 
4 * 1.0 = 52.0 
+4

Работа над вашими конвенциями код ... это легче читать ваш код. Если никто не может прочитать ваш код, никто не сможет помочь вам так быстро. –

+2

Если вы пытаетесь * суммировать * каждую цифру, почему вы умножаете и используете 'Math.pow'? Если вы хотите суммировать цифры, затем конвертируйте каждый символ ASCII в число и добавьте их. – lurker

+3

Вам не нужен второй цикл! Вместо этого добавьте вторую итерацию var. – Tobi

ответ

7

Там есть пара проблем с кодом.

Первая проблема заключается в том, что вам не нужны две петли, вам просто нужен один.

Вторая проблема сбивает с толку char s и int s. '0' - это не то же самое, что и 0; вместо этого '0' - это числовое значение, представляющее кодировку этого символа (который оказывается равным 48). Поэтому, чтобы получить нужное значение, которое вы хотите, вы должны вычесть '0' из char, прежде чем выполнять свою математику.

for(int i = 0; i < s.length(); i++) { 
    d = Math.pow(10, s.length() - i - 1); 
    int value = s.charAt(i) - '0'; 
    System.out.println(value + " * " + d 
         + " = " + (value*d)); 
} 

Это приблизит его к выходу. Он по-прежнему показывает .0 в конце, хотя, потому что d является double. Сделайте это int, чтобы исправить это.

//This can be scoped to inside the loop, so you don't need to declare it beforehand 
int d = (int)Math.pow(10,j); 
0
import java.util.Scanner; 
public class PrintEachDigits { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter the number: "); 
     int num = scan.nextInt(); 
     String s = "" + num; 
     int len = s.length() - 1; 
     long d = 0; 
     if (len < 2) { 
      d = 1;//For single digit 
     } else { 
      d = (long)Math.pow(10, len); 
     } 

     for (int i = 0; i < s.length(); i++) { 
      System.out.println(s.charAt(i) + " * " + d + " = " 
        + ((s.charAt(i) - '0') * d)); 
      d = d/10; 
     } 
    } 
}