Usando compareTo

Ola galera estou com uma duvida

eu tenho um campo Txfield e pego o valor dele e comparo com outro campo porem que ja foi inserido no BD.
porem estou com duvidas de como utilizar o compareTo , pois os dois valores sao do tipo BigDecimal.
o problema é que meio que ja me acostumei com o equals entaum nao comprendi muito bem como se usa o compareTo
segue abaixo o codigo que preciso usar o compareTo

Obrigado

if (nf.format(txValorDesconto.getText()).substring(3).compareTo(nf.format(sacado.getValorDesconto()).substring(3))==(O que eu coloco aqui ???)){
}

compareTo:


String abc = new String("abc");
String abc1 = new String("abcd");
int x = abc.compareTo(abc1);

System.out.println("O valor é: "+x);

x será negativo, pois a string abc é menor que a abc1.


String abc = new String("abc");
String abc1 = new String("abc");
int x = abc.compareTo(abc1);

System.out.println("O valor é: "+x);

x será 0, ambas são idênticas.


String abc = new String("abcd");
String abc1 = new String("abc");
int x = abc.compareTo(abc1);

System.out.println("O valor é: "+x);

x será positivo, abc é maior que abc1

1 curtida

O compareTo() e compareToIgnoreCase() retorna a diferença de duas Strings definindo a sua ordem alfabética entre elas.

Seguindo a tabela ASCII, ‘a’ vem antes de ‘b’ logo usando eles no método compareTo retornaria -1 pelo fato da distancia ser somente entre uma letra.

No primeiro exemplo do drsmachado a comparação se dá por ‘abc’ e ‘abcd’, logo a comparação é feita letra a letra enquanto cada letra compara resultar em 0 (equivalente) passase para a proxima letra.

1 curtida

De uma forma mais abrangente, o método comparteTo() é definido na Interface Comparable e compara dois objetos, retornando um valor negativo, zero, ou um valor positivo se o objeto for menor, igual ou maior que o objeto especificado.

entaum no caso com faria a minha comparação teria que atribuir uma variavel por exemplo result= a compareto(b)
algo assim ??
e naum compreendi a relação do ==0 >0 no final da comparação pois estou usando e funciona perfeitamente…

tenho comparações deste tipo


    if (txValorDesconto.getText().compareTo("0,00") == 0) {

axei que tinha compreendido porem agora nao sei esse ==0 que uso realmente representa o (0) ??

Se você deseja verificar comparação entre Strings use equals().

O compareTo() é para comparação de ordem léxica, no caso usado mais em ordenação alfabética seguindo a tabela ASCII.

Ordenando os valores da lista.

Exemplo:

[code] String[] lista = new String[] { “k”, “4”, “m”, “1”, “k”, “4”, “z”, “3” };
String aux;

	for (int i = 0; i <= lista.length; i++) {
		for (int c = i + 1; c < lista.length; c++) {
			int compareTo = lista[i].compareTo(lista[c]);
			if (compareTo > 0) {
				aux = lista[i];
				lista[i] = lista[c];
				lista[c] = aux;
			}
		}
	}
	for (String string : lista) {
		System.out.println(string);
	}[/code]

Se tentar fazer comparação com números monetários como parece ser seu caso irá dar problema.

[code]
String numeroMon = “0.00”;
String numeroMon2 = “0.0”;

	System.out.println(numeroMon.compareTo(numeroMon2)); // retorna 1 que indica que numeroMon em ordem alfabetica vem depois de numeroMon2
	
	BigDecimal bigDecimal = new BigDecimal("0.00");
	BigDecimal bigDecimal2 = new BigDecimal("0.0");

	
	System.out.println(bigDecimal.compareTo(bigDecimal2)); //retorna 0 que indica que são de mesmo valor[/code]

[color=red]OBS[/color]: BigDecimal não aceita ‘,’ como decimal.