[RESOLVIDO] Ajuda exercício do livro Deitel Cap.6

Galera, gostaria de uma ajuda nesse exercício para saber onde foi que errei! Eu já achei em um tópico antigo sobre o mesmo exercício:


Eu também já até postei sobre ele, esta minha dúvida por lá, porém, visando ficar em mais evidência a minha dúvida optei por criar este tópico para obter uma ajuda sobre onde que eu errei. Fiz uma solução para esse exercício (um milhão de variáveis, rsrs), entretanto, o mesmo não executa a inversão de valores para centenas e milhares, o programa só inverte os valores em dezenas mesmo quando o valor inserido é milhar ou centena. Aí que está: “a lógica não é a correta para esse exercício, não entendi o porque?”. Segue abaixo para que, por favor, alguém me dê uma luz de onde eu errei e desculpe qualquer coisa aí sobre repetir o tópico ou ter criado este tópico de forma errada (talvez, devido a duplicidade)!

import java.util.Scanner;
/* 6.26 Escreva um método que pega um valor inteiro e retorna o número com seus dígitos invertidos.
 * Por exemplo, dado o número 7631, o método deverá retornar 1367.
 * Incorpore o método dentro de uma aplicação que lê o valor do usuário e mostre o resultado.
 */
public class DigitosInvertidos {
	private int num;
	private int numDez;
	private int numCent;
	private int numMil;
	private int dez1;
	private int dez2;
	private int cent1;
	private int cent2;
	private int cent3;
	private int mil1;
	private int mil2;
	private int mil3;
	private int mil4;
	Scanner input = new Scanner(System.in);
	// método para obter o valor e testar seu tamanho para a inversão
	public void obtemValor(){	
		System.out.println("Informe um valor entre (10 e 9999):");
		num = input.nextInt();
		while ( num < 10 || num > 9999 ) {
			System.out.println("Entrada Inválida! Informe um valor entre (10 e 9999):");
			num = input.nextInt();
		}
		if (num >= 10 || num <= 99) {
			numDez = num;
			dez2 = numDez % 10;
			numDez = numDez / 10;
			dez1 = numDez % 10;
			System.out.printf("O valor invertido é: %d%d\n", dez2, dez1);
		} else if (num >= 100 || num <= 999) {
			numCent = num;
			cent3 = numCent % 10;
			numCent = numCent / 10;
			cent2 = numCent % 10;
			numCent = numCent / 10;
			cent1 = numCent % 10;
			System.out.printf("O valor invertido é: %d%d%d\n", cent3, cent2, cent1);
		} else if (num >= 1000 || num <= 9999) {
			numMil = num;
			mil4 = numMil % 10;
			numMil = numMil / 10;
			mil3 = numMil % 10;
			numMil = numMil / 10;
			mil2 = numMil % 10;
			numMil = numMil / 10;
			mil1 = numMil % 10;				
			System.out.printf("O valor invertido é: %d%d%d%d\n", mil4, mil3, mil2, mil1);
		}
	}
}
public class TestaDigitosInvertidos {
	public static void main(String[] args) {
		DigitosInvertidos testa = new DigitosInvertidos();
		testa.obtemValor();
	}
}

Olá

Mude as condições “||” para “&&” - por exemplo

 } else if (num >= 1000 || num <= 9999) {  

para

 } else if (num >= 1000 && num <= 9999) {  

Lembrando que o “||” = “ou” e “&&” = e . E para essa condição você tem que fazer uma comparação do tipo "valor maior ou igual a x E valor menor ou igual a y " , porque senão com o “ou” ele ja entra direto na primeira condição que você tiver. Ex: 9999 é maior ou igual a ( na primeira condição da sua classe )

Cara, antes de te dar uma solução bem fácil eu vou te perguntar:

Você é bem novato na área? Já programou em outras linguagens?

Porque tem um jeito bem fácil que usa muitos menos linhas que isso, usando em vez de int, a classe String

Mas se você for novato eu te ajudo nessa lógica aí mesmo, pra aprender como funciona…

:wink:

[quote=Ruttmann]Cara, antes de te dar uma solução bem fácil eu vou te perguntar:

Você é bem novato na área? Já programou em outras linguagens?

Porque tem um jeito bem fácil que usa muitos menos linhas que isso, usando em vez de int, a classe String

Mas se você for novato eu te ajudo nessa lógica aí mesmo, pra aprender como funciona…

:wink: [/quote]

Sim, estou querendo trabalhar com isso (desenvolimento Java), já trabalhei com teste de software durante um ano mais desejo ir para Java. E difícil eu sei, mais uma hora eu tinha que começar, se a pergunta foi idiota, perdão, mas se eu não perguntasse eu nunca iria saber!

Eu te agradeço a atenção depositada, pois quero saber sobre esta lógica onde foi que eu errei e desculpe qualquer coisa!

[quote=malikoski]Olá

Mude as condições “||” para “&&” - por exemplo

 } else if (num >= 1000 || num <= 9999) {  

para

} else if (num >= 1000 && num <= 9999) { [/quote]

Vou tentar, obrigado pela dica!

[quote=brunoeac][quote=Ruttmann]Cara, antes de te dar uma solução bem fácil eu vou te perguntar:

Você é bem novato na área? Já programou em outras linguagens?

Porque tem um jeito bem fácil que usa muitos menos linhas que isso, usando em vez de int, a classe String

Mas se você for novato eu te ajudo nessa lógica aí mesmo, pra aprender como funciona…

:wink: [/quote]

Sim, estou querendo trabalhar com isso (desenvolimento Java), já trabalhei com teste de software durante um ano mais desejo ir para Java. E difícil eu sei, mais uma hora eu tinha que começar, se a pergunta foi idiota, perdão, mas se eu não perguntasse eu nunca iria saber!

Eu te agradeço a atenção depositada, pois quero saber sobre esta lógica onde foi que eu errei e desculpe qualquer coisa![/quote]

Legal colega, não desiste não, é difícil mas depois vc vê como é legal!

E outra, não existe pergunta idiota, existem respostas idiotas…

:wink:

Vou dar uma analisada nessa sua lógica…

Tinha esquecido de explicar o porque da mudança. Editei minha resposta. Testa lá.

[quote=Ruttmann]Cara, antes de te dar uma solução bem fácil eu vou te perguntar:

Você é bem novato na área? Já programou em outras linguagens?

Porque tem um jeito bem fácil que usa muitos menos linhas que isso, usando em vez de int, a classe String

Mas se você for novato eu te ajudo nessa lógica aí mesmo, pra aprender como funciona…

:wink: [/quote]

É a classe StringBuffer que tem o método reverse que daria o resultado solicitado pelo exercício.

[quote=malikoski]Olá

Mude as condições “||” para “&&” - por exemplo

 } else if (num >= 1000 || num <= 9999) {  

para

 } else if (num >= 1000 && num <= 9999) {  

Lembrando que o “||” = “ou” e “&&” = e . E para essa condição você tem que fazer uma comparação do tipo "valor maior ou igual a x E valor menor ou igual a y " , porque senão com o “ou” ele ja entra direto na primeira condição que você tiver. Ex: 9999 é maior ou igual a ( na primeira condição da sua classe )

[/quote]

Obrigado malikoski,

Que erro bobo esse, era só trocar o operador lógico de OR para AND!
Te agradeço muito aí pela luz e sua dica deu certo!

[quote=Ruttmann][quote=brunoeac][quote=Ruttmann]Cara, antes de te dar uma solução bem fácil eu vou te perguntar:

Você é bem novato na área? Já programou em outras linguagens?

Porque tem um jeito bem fácil que usa muitos menos linhas que isso, usando em vez de int, a classe String

Mas se você for novato eu te ajudo nessa lógica aí mesmo, pra aprender como funciona…

:wink: [/quote]

Sim, estou querendo trabalhar com isso (desenvolimento Java), já trabalhei com teste de software durante um ano mais desejo ir para Java. E difícil eu sei, mais uma hora eu tinha que começar, se a pergunta foi idiota, perdão, mas se eu não perguntasse eu nunca iria saber!

Eu te agradeço a atenção depositada, pois quero saber sobre esta lógica onde foi que eu errei e desculpe qualquer coisa![/quote]

Legal colega, não desiste não, é difícil mas depois vc vê como é legal!

E outra, não existe pergunta idiota, existem respostas idiotas…

:wink:

Vou dar uma analisada nessa sua lógica…[/quote]

Resolvido, novamente agradeço aí pela atenção e um dia eu chego lá se Deus quiser!