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.”
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
rsmorais
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
LostSoldier
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
rsmorais
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:
publicstaticvoidmain(String[]args){Scannerteclado=newScanner(System.in);System.out.println("Digite um número entre 1000 e 9999: ");intx=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:
intx=12345;intpares=0;while(x!=0){pares+=(x%10)%2==0?1:0;x/=10;}System.out.printf("Quantidade de pares: %d\n",pares);
R
rsmorais
Não consigo entender o que foi feito nessa linha… O que é o “?”
lvbarbosa1 like
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:
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:
intx=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:
(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
Se for verdadeiro, o operador ternário retorna 1, se for falso, retorna 0
R
rsmorais1 like
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.
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
rsmorais
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
rsmorais
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.
publicstaticvoidmain(String[]args){Scannerteclado=newScanner(System.in);intpares=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:
intx=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: