Olá pessoal, dei uma procurada na net e não achei nada que possa me ajudar no meu problema public void BubbleSort(String[] vetora){ int tam = vetor.length; for(int i=0;i<tam-1;i++){ for(int j=0;j<tam-1;j++){ if(//OQUE UE FAÇO AQUI PARA COMPARAR STRINGS?//){ String aux; aux = vetora[j]; vetor[j] = vetor[j+1]; vetora[j+1] = aux; } } } } no codigo acima, eu preciso comparar strings! saber se A é maior que B ou se Z é menor que C >
Cara para obter o tamanho de uma String utiliza o metodo lenght(); que vai te retornar um numero inteiro. Então vc pode pegar os dados da String e passar para um inteiro e comparar. int aInteiro = a.lenght(); if (aInteiro > bInteiro) { //Seu codigo }else{ //Seu codigo }
[quote=rei_nl_ds]Cara para obter o tamanho de uma String utiliza o metodo lenght(); que vai te retornar um numero inteiro. Então vc pode pegar os dados da String e passar para um inteiro e comparar. int aInteiro = a.lenght(); if (aInteiro > bInteiro) { //Seu codigo }else{ //Seu codigo }[/quote] é… o objetivo não é muito bem esse o algoritmo é o BubbleSort que organiza valores. oque eu preciso é o seguinte! no vetor[0] eu tenho o valor B dentro do if eu preciso saber qual é o maior! ou o menor eu sei que existe uma syntax para isso só não lembro qual
if(vetor[i].compareTo(vetor[j]) < 0)
Deixa eu ver se entendi o prefixo “< 0” nesse caso seria o comparativo se eu quero saber se é maior ou menor?
Deixa eu ver se entendi o prefixo “< 0” nesse caso seria o comparativo se eu quero saber se é maior ou menor? [/quote] O método compareTo tem 03 tipos de retorno possíveis: [list]-Um número inteiro negativo: Que representa que o objeto comparado é MENOR do que o outro.[/list] [list]-Um zero: Que representa que os objetos comparados são iguais[/list] [list]-Um número inteiro positivo: Que representa que o objeto comparado é MAIOR do que o outro.[/list] Neste caso, se o retorno do método vetor[i].compareTo(vetor[j]) for menor que zero ( <0 ), ele será um número inteiro negativo. Portanto será menor. Sacou? Da uma olhadinha aqui depois:
Muito obrigado cara, sanou minha duvida!!!
[quote=F?ix~*]Muito obrigado cara, sanou minha duvida!!! [/quote] Beleza cara! E já testou? Funcionou conforme esperado?
Desculpa o double mas estou enfrentando um erro aqui Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 4 public void BubbleSort(String[] vetora){ int tam = vetor.length; for(int i=0;i<tam-1;i++){ for(int j=0;j<tam-1;j++){ if(vetora[j].compareTo(vetora[j+1]) >0){ String aux; aux = vetora[j]; vetor[j] = vetor[j+1]; vetora[j+1] = aux; } } } } exatamente no if acusa o erro, oque estou fazendo de errado? O.o valor de vetora[j] é “c”
na linha 2 você não esta pegando o comprimento de “vetora” e sim de “vetor” que nem mesmo foi declarado nesse código; a mesma troca de “vetor” por “vetora” acontece na linha 8. Não tem a ver com seu problema mas o j deve variar de “0” a “tam - 1 - i” pois os i maiores já estarão no final a cada iteração, por tanto, ordenados.
É. Teu código tá meio complicado. Vou te passar a dica de como fazer o for… for (int j = 0; j < tam; j++) { for (int i = j + 1; i < tam; i++) { O resto é contigo…
Nossa velho, que passada de erro patética a minha!!! muito obrigado isso me ajudou a lembrar que preciso ir dormi!!! obrigado mesmo!! [quote=pvrsouza]É. Teu código tá meio complicado. Vou te passar a dica de como fazer o for… for (int j = 0; j < tam; j++) { for (int i = j + 1; i < tam; i++) { O resto é contigo… :-D[/quote] Opa!!! assim fica mais bonito!!! obrigado pela dica brother vocês foram show!!!
Boa tarde galera. Tenha essas duas String que são retornadas do base de dados string1 ="01 21 52 12 36 55" E string2 = "26 44 46 49 55 56"; preciso pegar os valores comuns entre as duas. Qual a melher forma para fazer isso? transforma-las em Array e depois percorrer nelas pegando os valores? ou tem uma outra forma mas pratica ou mas bonito.
Uma solução é utilizar a classe StringTokenizer StringTokenizer st = new StringTokenizer(string1, " ");//vai separar a string nos valores desejados, delimitando pelo espaço entre os valores. String elemento = null; while (st.hasMoreTokens()) { elemento = st.nextToken(); } Aí faz a mesma coisa para a string2 e compara os valores dela com os da string1.
[quote=caiomacedor]Boa tarde galera. Tenha essas duas String que são retornadas do base de dados string1 ="01 21 52 12 36 55" E string2 = "26 44 46 49 55 56"; preciso pegar os valores comuns entre as duas. Qual a melher forma para fazer isso? transforma-las em Array e depois percorrer nelas pegando os valores? ou tem uma outra forma mas pratica ou mas bonito.[/quote] Vamos lá. import java.util.*; class ValoresComuns { public static void main(String[] args) { String s1 = "01 21 52 12 13 36 55"; String s2 = "26 13 44 46 49 55 56"; String[] v1 = s1.split (" "); String[] v2 = s2.split (" "); Set<String> set1 = new TreeSet<String> (Arrays.asList (v1)); Set<String> set2 = new TreeSet<String> (Arrays.asList (v2)); set1.retainAll (set2); System.out.println (set1); // Deve imprimir "[13, 55]" // Se você não sabe trabalhar com Set, então vou converter em um Array para você. String[] s3 = set1.toArray (new String[0]); for (int i = 0; i < s3.length; ++i) { System.out.println (i + ":" + s3[i]); } } }
Não é a solução mais bonita, mas tmb não é custosa… [code]public static void main(String[] args) { String a = “a b c 1 2 3”; String b = “a b c 1 3 2”; int indiceDiferenca = comparaStrings(a, b); if (indiceDiferenca == -1){ System.out.println("São iguais"); }else{ System.out.println("Diferença em " + indiceDiferenca); } a = "a b"; b = "a b"; indiceDiferenca = comparaStrings(a, b); if (indiceDiferenca == -1){ System.out.println("São iguais"); }else{ System.out.println("Diferença em " + indiceDiferenca); } } /** * Método que vai comparar duas strings * @param s1 * @param s2 * @return * O índice em que foi encontrada a primeira ocorrência de diferença. * Se as strings forem iguais, retornará -1. */ public static int comparaStrings(String s1, String s2){ int i = 0; /* * Vai um por um passeando pelos dois vetores */ while ((i < s1.length()) && (i < s2.length())){ if (s1.charAt(i) != s2.charAt(i)){ return i; } i++; } /* * Se chegar aqui, ou são iguais ou um é menor que o outro (nesse caso, diferentes) */ if (s1.length() == s2.length()){ return -1; } /* * Se chegar aqui, um é menor que o outro... "i" conterá o último índice do menor vetor */ return i; }[/code]ok?
Muito obrigado a todos galera, Mas a a forma que as se adequa a minha nescessidade é a forma que o “entanglement” mencionou. Isso porque eu preciso separar os valores comuns. Veja como ficou: String[] string1 = "01 21 52 12 36 55".split(" "); String[] string2 = "26 21 46 49 55 01".split(" "); Set<String> set1 = new TreeSet<String> (Arrays.asList(string1)); Set<String> set2 = new TreeSet<String> (Arrays.asList(string2)); List<String> comuns = new ArrayList<String>(); set1.retainAll(set2); for (String string : set1) { comuns.add(string); } System.out.println(comuns); |