Preciso converter este código Python em um código Java.
s = int(input())
a = int(input())
b = int(input())
interval = list(range(a,(b+1)))
interval = [format(x, ‘02d’) for x in interval]
sumInterval = []
for n in interval:
sumInterval.append(sum(int(i) for i in n))
check = 0
for n in sumInterval:
if n == s:
check += 1
print(check)
Para realizar o input no java, vc pode usar a classe Scanner
(dá uma pesquisada no fórum que há vários exemplos de uso).
Esse range pode ser feito assim:
IntStream.range(a, (b + 1)).boxed().collect(Collectors.toList());
O format, vc pode dá uma olhada no System.out.printf
junto com um for
ou forEach
.
O resto são iterações simples incrementando uma lista.
Primeiro acho melhor simplificar o código original, aí fica mais fácil “traduzir” pra outra linguagem.
O código está iterando por todos os números entre a
e b
, e verificando se a soma dos dígitos é igual a s
.
Sendo assim, não precisa criar uma lista com todos os números, pode iterar pelo próprio range
. E não precisa transformar cada número em string (é isso que o format
está fazendo), para depois usar esta string para somar os dígitos (dá pra fazer isso com “continhas” bem básicas). E não precisa guardar tudo em outra lista, só para depois fazer outro for
que compara seus valores com s
.
Ou seja, o código original poderia ser assim:
def soma_digitos(n):
soma = 0
while n > 0:
n, d = divmod(n, 10)
soma += d
return soma
s = int(input())
a = int(input())
b = int(input())
check = 0
# para cada número do range
for n in range(a, b + 1):
# verifica se a soma dos dígitos é igual a "s"
if s == soma_digitos(n):
check += 1
print(check)
Tendo isso, traduzir para Java fica muito mais simples:
public static int somaDigitos(int n) {
int soma = 0;
while (n > 0) {
soma += n % 10;
n /= 10;
}
return soma;
}
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int s = scan.nextInt();
int a = scan.nextInt();
int b = scan.nextInt();
int check = 0;
// para cada número entre "a" e "b"
for (int n = a; n <= b; n++) {
// verifica se a soma dos dígitos é igual a "s"
if (s == somaDigitos(n)) {
check++;
}
}
System.out.println(check);
}
Não acho que valha a pena converter o código original, pois como já explicado, eu acho que possui complicações desnecessárias (criar listas à toa, etc). Mas se ainda sim quiser, pode seguir as dicas dadas acima.