Inserir um único número com vários dígitos e ordená-lo na ordem crescente e decrescente - Java

03/01/2020

5

Olá pessoal!

Sou iniciante. Tenho uma atividade para resolver mas, pesquisando na internet, não consegui encontrar forma para resolver. O enunciado é o seguinte:

Construa um programa que dado um número n, introduzido pelo utilizador, verifique se os seus dígitos estão ordenados de forma crescente, decrescente ou se não estão ordenados.

Pelo que entendi, não é o caso de tentar resolver usando array, pois é necessário informar um único número com alguns dígitos e ordená-lo (para mais ou para menos), apresentando as confirmações na tela.

Alguém tem alguma sugestão para me ajudar?

Obrigado,
João Medeiros
Responder

Post mais votado

03/01/2020

Esse caso é um pouquinho complexo de explicar, você vai ter que usar a tabela unicode(https://unicode-table.com/en/) pra descobrir o valor unicode de um caractere que venha antes dos números, pegar esse caractere e usar como primeira comparação, num método que irá verificar se o valor unicode do caractere de comparação é menor do que o valor unicode do caractere que vem após ele(valores unicode menores vem antes no alfabeto, maiores vem depois) em caso afirmativo o caractere de comparação se torna igual ao caractere que foi comparado e isso continua até que se acabem os caracteres da string, em caso negativo o loop se encerra e retorna false, pra verificar se é decrescente é só pegar um caractere com valor unicode superior ao dos números e fazer um método que faça o reverso do método anterior, eis um exemplo:

import java.util.Scanner;


public class Main
{
    private static boolean crescente(char anterior, char[] numero) {
        for (char atual : numero) {
            if (atual < anterior){
                return false;
            }
            anterior = atual;
        }
        return true;
        
    }
    
    private static boolean decrescente(char anterior, char[] numero) {
        for (char atual : numero) {
            if (atual > anterior){
                return false;
            }
            anterior = atual;
        }
        return true;
        
    }
    
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("Digite um número:");
		String numero = scan.next();
		char digitos[] = numero.toCharArray();
		char anterior = '/';
		char proximo = ':';
		boolean crescente = crescente(anterior, digitos);
		boolean decrescente = decrescente(proximo, digitos);
		if(numero.length() == 1){
		    System.out.println("Só tem um dígito!");
		}else if(crescente){
		    System.out.println("Está em ordem crescente!");
		}else if(decrescente){
		    System.out.println("Está em ordem decrescente!");
		}else{
		    System.out.println("Está desordenado!");
		}
	}
}
Responder

Mais Posts

03/01/2020

João Medeiros

Esse caso é um pouquinho complexo de explicar, você vai ter que usar a tabela unicode(https://unicode-table.com/en/) pra descobrir o valor unicode de um caractere que venha antes dos números, pegar esse caractere e usar como primeira comparação, num método que irá verificar se o valor unicode do caractere de comparação é menor do que o valor unicode do caractere que vem após ele(valores unicode menores vem antes no alfabeto, maiores vem depois) em caso afirmativo o caractere de comparação se torna igual ao caractere que foi comparado e isso continua até que se acabem os caracteres da string, em caso negativo o loop se encerra e retorna false, pra verificar se é decrescente é só pegar um caractere com valor unicode superior ao dos números e fazer um método que faça o reverso do método anterior, eis um exemplo:

import java.util.Scanner;


public class Main
{
    private static boolean crescente(char anterior, char[] numero) {
        for (char atual : numero) {
            if (atual < anterior){
                return false;
            }
            anterior = atual;
        }
        return true;
        
    }
    
    private static boolean decrescente(char anterior, char[] numero) {
        for (char atual : numero) {
            if (atual > anterior){
                return false;
            }
            anterior = atual;
        }
        return true;
        
    }
    
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("Digite um número:");
		String numero = scan.next();
		char digitos[] = numero.toCharArray();
		char anterior = '/';
		char proximo = ':';
		boolean crescente = crescente(anterior, digitos);
		boolean decrescente = decrescente(proximo, digitos);
		if(numero.length() == 1){
		    System.out.println("Só tem um dígito!");
		}else if(crescente){
		    System.out.println("Está em ordem crescente!");
		}else if(decrescente){
		    System.out.println("Está em ordem decrescente!");
		}else{
		    System.out.println("Está desordenado!");
		}
	}
}


Caro Daniel, boa noite!

Apesar de ser iniciante, compreendi a sua explicação e a lógica do código, o qual funcionou perfeitamente.
Mais uma vez muito obrigado pelo auxílio valioso.

João Medeiros
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar