Como transformar um int em vetor? java

13 respostas
R

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.”

13 Respostas

L

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++;
}
lvbarbosa
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.

R

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!

L

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…

R

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. 
		*/

	}
	
}
lvbarbosa

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);
R

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

lvbarbosa

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
R

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

Agora vou tentar novamente. Valeu lvbarbosa!

lvbarbosa

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!

R

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.

R

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);
	
}

}

lvbarbosa

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.

Criado 1 de março de 2017
Ultima resposta 1 de mar. de 2017
Respostas 13
Participantes 3