Java程序在条件范围内打印数字

时间:2016-12-09 23:34:47

标签: java loops range

我通过循环练习有点迷失,我必须在符合以下条件的范围内打印数字:

  1. 一个数字的每个数字必须与他左边的数字 的总和相同。例如:

    • 将打印112,因为它的所有组成部分都是他左边的数字的总和。

    • 101不会被打印,因为0不是他左边数字的总和。

  2. 如果总和大于9,则会丢弃数十

    • 将打印5500。
  3. 我有这段代码:

    {{1}}

    我创建了另外两种方法,第一种方法计算数字的长度,第二种方法根据位置计算数字的值。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我查看了您的代码,并确定了逻辑上的一些问题,并且我已经纠正了这些问题,并通过以下代码检查是否可以了解更换器。 (请记住,因为你的变量不是英文的,所以很难理解你的逻辑)。如果下面的代码将提供您所需的结果。

public class Program {

/**
 * Prints the list of numbers from desde to hasta such that the righmost
 * digit of the sum of previous digits equals current digit, and that
 * happens for all digits
 * 
 * Prints a 2nd line with as many underscores as characters contains the 1st
 * line
 * 
 * If desde < 10 o the parameters make no sense, prints Err __
 * 
 * 
 * @param desde
 *            int from (included)
 * @param hasta
 *            int to (included)
 * @return void
 */
public static void sumDigitsConsecutius(int desde, int hasta) {

    int suma = 0;
    int numeroSuma = 0;

    for (int i = desde; i <= hasta; i++) {

        int longitud = lenght(i);
        int contador = 0;

        suma = 0;
        for (int posicion = longitud; posicion > 0; posicion--) {


            numeroSuma = posicioNumber(i, posicion);
            if (posicion !=longitud && suma != numeroSuma) {
                break;
            } else {
                contador++;
            }
            suma = suma + numeroSuma;

            //If the sum greater than 9 then position discarded 
            if(suma>=10){
                suma=suma%10;
            }
        }

        if (contador == longitud ) {
            System.out.println(i);
        }

    }

}

/**
 * With this method i can calculate the length of a number
 */

public static int lenght(int numero) {

    int contador = 0;

    while (numero > 0) {
        contador++;
        numero = numero / 10;
    }
    return contador;

}

public static int posicioNumber(int numero, int posicio) {

    // Digit of n in position p
    int x;
    // Remove right digits from position p.
    x = numero / (int) Math.pow(10, posicio - 1);
    // Get the last digit.
    x = x % 10;
    return x;

}

public static void main(String[] args) {
    sumDigitsConsecutius(1, 1000);
}


}

对于上面的类,它将给出以下输出(数字范围1-1000)

1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
112
224
336
448
550
662
774
886
998