Como transformar um int em vetor? java

Estou respondendo um exercício em java e preciso pegar o valor de uma variável int e separar os caracteres em um array para poder compará-los. Existe algum método em Java para tal ação?

Enunciado: “Escreva um programa em Java que leia um valor inteiro (o número deve ter quatro dígitos: 1000 - 9999). O seu programa deverá imprimir a quantidade de dígitos que são pares. Por exemplo: suponha que o valor de entrada seja 9679. A quantidade de dígitos pares é igual a 1.”

Tente converter o inteiro para uma sequência de caracteres…

char[] caracteres = Integer.toString(inteiro).toCharArray();

Depois tente criar o vetor com o tamanho do texto…

int[] unidades = new int[caracteres.length];

E para popular…

int i = 0;
for (char unidade : caracteres) {
    unidades[i] = Character.getNumericValue(unidade);
    i++;
}
public class Main {

    public static int quantidadeDeDigitos(int n) {
        return (int) floor(log10(max(abs(n), 1))) + 1;
    }

    public static void main(String[] args) {
        int n = 12343;
        int quantidade = quantidadeDeDigitos(n);
        int[] digitos = new int[quantidade];
        for (int i = quantidade - 1; n != 0; i--) {
            System.out.println(n);
            digitos[i] = n % 10;
            n /= 10;
        }
        System.out.println(Arrays.toString(digitos));
    }
}

EDIT: postei só a lógica de saber quantos dígitos tem, esqueci que você queria um array. Arrumei agora. Essa é uma alternativa, caso você não queira converter para String.

Veja o enunciado:

“Escreva um programa em Java que leia um valor inteiro (o número deve ter quatro dígitos: 1000 - 9999). O seu programa deverá imprimir a quantidade de dígitos que são pares. Por exemplo: suponha que o valor de entrada seja 9679. A quantidade de dígitos pares é igual a 1.”

Se for possível fazer o código comentado eu agradeço pois sou iniciante. Valeu!

Vi o enunciado mas não vou respondê-lo por você, senão você não aprende…

O caminho das pedras foi mostrado, dentro do while você tem condições de testar os valores usando o operador de módulo % para saber quem é par ou imprar… tente fazer, mostre o que já fez, a gente te ajuda…

Eu tenho uma lógica montada na cabeça, só queria saber se tem um método que pega os caracteres e coloca em um vetor. Veja onde eu parei:

public static void main(String[] args) {
	Scanner teclado = new Scanner(System.in);
	
	
	System.out.println("Digite um número entre 1000 e 9999: ");
	int x = teclado.nextInt();
	if(x < 1000 || x > 9999){
		System.out.println("Número inválido!");
	}
	else{
		/*
		 A partir daqui eu iria usar o método parseInt(), porém não
		me lembro bem como ele funciona. Por isso perguntei se tem algum método que faça isso. 
		*/

	}
	
}

Você não precisa do array, é só ir contando os dígitos pares do número. Faz assim:

int x = 12345;
int pares = 0;
while (x != 0) {
    pares += (x % 10) % 2 == 0 ? 1 : 0;
    x /= 10;
}
System.out.printf("Quantidade de pares: %d\n", pares);

Não consigo entender o que foi feito nessa linha… O que é o “?”

Desculpa kkkkkkkk

O ? faz parte de um operador chamado de “ternário”. O operador ternário é uma espécie de atribuição condicional. É uma forma mais sucinta de escrever isso daqui:

int x;
if (alguma_condicao) {
    x = valor_A;
else {
    x = valor_B;
}

Caso a condição seja verdadeira, x vira valor_A. Se não, x vira valor_B. Com o operador ternário, podemos escrever esse código inteiro em apenas uma linha:

int x = alguma_condicao ? valor_A : valor_B;

A interrogação inicia o operador ternário. O operador ternário SEMPRE retorna um valor. Os dois pontos separam os valores que serão retornados, para o caso da condição ser verdadeira ou falsa. O valor da esquerda será retornado caso a condição seja verdadeira, e o da direita caso a condição seja falsa.

No caso ali do código que eu te passei, funciona assim:

  1. (x % 10) % 2 == 0 significa: o resto da divisão inteira de x por 10 é par, e retorna um booleano que vai ser testado pelo operador ternário
  2. Se for verdadeiro, o operador ternário retorna 1, se for falso, retorna 0
1 curtida

Entendi! Então é um if/else compactado. rs

Agora vou tentar novamente. Valeu lvbarbosa!

1 curtida

Quase!

Você consegue fazer o mesmo que o operador ternário faz com um if/else, mas não consegue fazer tudo que um if/else faz com um operador ternário.

Por exemplo, se você tem algo assim:

if (condicao) {
    // varias chamadas de função que não retornam nada
else {
    // outras chamadas
}

Não tem como fazer isso com um operador ternário. Bem, até tem, mas é estranho, não foi feito pra isso. O operador ternário foi feito para fazer atribuição condicional de valores!

Então quer dizer que se recomenda utilizar essa forma quando as instruções forem simples como incrementar etc., certo?

Só não sei o conceito de operador ternário.

Vou deixar minha resposta aqui para verem como ficou. Valeu mesmo pela ajuda!!

lvbarbosa, fiz da maneira mais fácil para um iniciante. Porém o jeito que você ensinou é bem mais sucinto. :wink:

public static void main(String[] args) {
	Scanner teclado = new Scanner(System.in);
	int pares = 0, x;
	
	System.out.print("Digite um número entre 1000 e 9999: ");
	x = teclado.nextInt();
	if(x < 1000 || x > 9999){
		System.out.println("Número inválido!");
	}
	else{
		while(x != 0){
			if((x % 10) % 2 == 0){
				pares ++;
			}
			x = x/10;
		}
	}
	System.out.println("Nº de pares: "+ pares);
	
}

}

Isso, tipo: do jeito que um operador binário opera com dois valores (como o de multiplicação, por exemplo, *), o ternário opera com três valores. No caso do Java, esse operador é uma expressão condicional. Quando a gente faz assim:

int x = 3;

O valor 3 é uma expressão fixa, sempre vai valer 3. O operador ternário do Java permite que a gente escreva uma expessão que muda de acordo com alguma condição. Por exemplo:

Ao invés de fazer isso:

if (condicao) {
    System.out.println(1);
} else {
    System.out.println(2);
}

podemos fazer isso:

System.out.println((condicao ? 1 : 2));

Sempre que o valor de uma expressão depender de uma condição, você pode utilizar o operador ternário.