Usando compareTo

5 respostas
juliocesarsrosa

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 ???)){
}

5 Respostas

drsmachado

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

KamikazeBr

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.

drigo.angelo

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.

juliocesarsrosa

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) ??

KamikazeBr

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:

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

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

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

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

Criado 31 de janeiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 5
Participantes 4