| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 07:18:49
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Oi,
Dei uma pesquisada aqui antes e não achei nada que me ajude, e tambem estou num caso bem especifico. O exercicio pede que eu crie um vetor(array) de string e ordene eles. Só que não posso usar Arraysort, tem que ser na mão mesmo.
O que eu fiz foi o seguinte, aqui vai um treixo do algoritmo.
Tipo, Ele de cara ja ordena caso a primeira letra seja diferente, agora, estou tendo problemas para ordenar quando a palavra é quase igual. Não sei porque mas esta dando alguns problemas de outofbounds onde esta comentado "// problemas aqui" Primeiro eu não estou sabendo porque esta estourando o algoritmo.
É por causa dessa linha?
E não estou conseguindo ordenar strings com mesmos caracteres e com tamanhos diferentes.
Por exemplo, na sequencia eu coloco: "aaaa"; "aaa"; "aa" e "a". O programa não esta colocando os strings que tem menos caracteres em primeiro lugar,o resultado final esta dando:
nome[0] = aaaa
nome[1] = aaa
nome[2] = aa
nome[3] = a
Gostaria que fosse ao contrario mas não estou sabendo implementar isso.
Bom, se alguem puder me ajudar em alguma parte eu agradeço, estou tentando aqui.
vlw
This message was edited 1 time. Last update was at 21/10/2009 13:08:14
|
O problema o antecede onde a solução encontra |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 07:35:19
|
EugenioMonteiro
JavaTeenager
![[Avatar]](/images/avatar/ea7fe912d5c09bd9597f4b03217e8fff.jpg)
Membro desde: 17/11/2007 15:36:32
Mensagens: 176
Offline
|
Tenta este método:
Se retornar um inteiro positivo, significa que "umaString" vem depois de "outraString" (se for um inteiro negativo é o inverso), e se for zero, as strings são iguais.
|
Analista de T.I.
Universidade Federal de Minas Gerais
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 07:41:47
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Obrigado Eugenio, gostei desse comando, mais para frente vou usa-lo, mas acho que meu professor não vai aceitar porque antes eu apresentei esse mesmo exercicio com arraysort e ele mandou eu fazer denovo, acho que ele quer com if's e elses e fors.
|
O problema o antecede onde a solução encontra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 08:06:59
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20578
Localização: Curitiba/PR
Offline
|
O compareTo só fará a comparação. A ordenação em si ainda continuará com ifs e fors.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 08:45:47
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Sim, eu entendi, mas vou fazer inclusive as comparações com if e else. Não quero arriscar perder a nota pois ja estou tendo que refazer.
Mudei o Algoritmo para esse formato.
Bom, o que ele faz:
Caso a ordem seja feita crescente, é tudo tranquilo, ele mantei os strings na ordem crescente. agora no caso em que tem que trocar porque a segunda string é menor, ele esta dando outofbounds nessa linha 50.
Esta bem simples, digamos que temos dois strings, o nome[j] = aaaa e o [j+1] = aaa. bom, de acordo com o algoritmo era para trocar de ordem, mas esta estourando, mesmo eu fazendo a estrutura for com contador pelo menor srting, [j+1]. Não sei se deu para entender o que eu falei, mas acho que é isso. Se alguem puder ajudar eu já fico grato.
Não faço a menor ideia do porque esta dando outofbounds.
|
O problema o antecede onde a solução encontra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 09:04:12
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Amigo, todo programador tem de ser um "Jack, o Estripador" e um "Dr. Frankenstein" ao mesmo tempo.
O seu lado "Jack" se manifesta quando você diz "Ok, vamos em partes"... ou seja, você pega esse problema grande e, em vez de fazer um programa com uma única função que você não está conseguindo corrigir, divide em várias funções.
O seu lado "Dr. Frankenstein" se manifesta quando você pega as partes e as costura (espero que não seja para fazer um "monstrinho" )
De qualquer maneira, quebre seu problema em pelo menos 3 pedaços:
a) Um método para comparar 2 strings.
b) Um método para trocar duas posições dentro de um array.
c) O método para efetuar a ordenação em si.
Do jeito que está, é impossível saber por que é que está dando "Out of Bounds".
É muitas partes do corpo esquartejadas para você pôr dentro da mala, aham, é muita coisa para você entender ao mesmo tempo.
Faça os três métodos, um de cada vez (aconselho começar pelo b, que é o mais fácil), corrija cada um, e junte tudo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 10:11:25
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Estava escrevendo isto quando vi sua mensagem e vi mais problemas. Foi mal, vou explicar certinho como funciona.
A linha 7, logo no começo compara o tamanho de caracteres entre uma String e outra.
Se o String que vai ser comparado, nome[j].length(), tiver mais caracteres que nome[j+1].length(), como diz na linha 7, ele vai para linha 26 e cria um for do tamanho do String menor, no caso nome[j+1].length:
Esse for vai escanear até o ultimo caracter do String [j+1], como disse anteriormente. E em seguida, na linha 29 vê se "k" da "estrutura for" for diferente do tamanho maximo da string [j+1]
Até ai tudo funciona beleza. Porém, quando o valor de k fica igual a (nome[j+1].length()-1) ele entra na linha 49, esta:
Que diz que se o caracter do nome[j], string maior, tiver a mesma letra ou maior que o ultimo caracter de nome[j+1] então ele executa as trocas, linhas 52 até 62. Porem esta dando out of bounds em alguma parte. coloquei um System.out.println("Entrou aqui"); assim que ele passa por esta linha, ele passa uma vez, na segunda não.
Então o que acontece:
Escou usando esses valores para nome[]:
nome[0] = "aaaaa";
nome[1] = "aaaa";
nome[2] = "aaa";
nome[3] = "aa;
A primeira vez funciona e ele troca: então fica:
nome[0] = "aaaa";
nome[1] = "aaaaa";
nome[2] = "aaa";
nome[3] = "aa;
Na segunda vez dá outofbounds. Não faço ideia do por que.
|
O problema o antecede onde a solução encontra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 10:48:54
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi, Está muito claro qual é o problema: Se o nome[j] tiver conteudo "aaa" e o 'k' tiver conteudo de 3... o que vai acontecer ? Out of bounds... Então o correto seria: Viu ? Tchauzin!
This message was edited 1 time. Last update was at 21/10/2009 10:49:18
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 11:44:32
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Blackbeard wrote:Sim, eu entendi, mas vou fazer inclusive as comparações com if e else. Não quero arriscar perder a nota pois ja estou tendo que refazer.
Antes de discutir se o que o seu professor ta pedindo faz sentido ou nao, leia:
http://www.refactoring.com/catalog/extractMethod.html
Pelo amor de tudo que eh mais bonito nesse mundo. Serio mesmo, leia:
http://www.refactoring.com/catalog/extractMethod.html
De verdade, eu suplico. Leia:
http://www.refactoring.com/catalog/extractMethod.html
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 12:02:17
|
peresjuliao
JavaTeenager
![[Avatar]](/images/avatar/15322a5c9ba9bef26eb1388393e25a01.jpg)
Membro desde: 24/11/2006 00:17:17
Mensagens: 194
Offline
|
Olá, Companheiro
Coloca o programa inteiro ai pra gente ver.
Por que eu não sei o que significa n ?
Até quando esse laço executa?
Será que se eu der somente os tijolos para um pedreiro ele saberá o que eu quero construir?
Não seria mais fácil eu dar a planta da casa?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 12:11:30
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Tudo bem.... concordo plenamente que o método dele está dificil de entender e que não é o mais correto a fazer..
Porém, nós estamos nos esquecendo que ele quer fazer assim. E que estamos aqui para retirar dúvidas referente a isso que ele passou.
Eu tenho certeza de que com o que eu falei não ocorrerá o erro de "Out of Bounds", e estou ansiosa para ver qual será o próximo "desafio".
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 12:17:49
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline
|
me ajuuuuuuuuuuuuuuuuuuuuuuuuuuuuda ae entao galera?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 12:27:10
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Nossa lina, Obrigado, vc manja muito.
Eu só troquei o sinal de < para >.
Muito obrigado mesmo, resolvido.
|
O problema o antecede onde a solução encontra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/10/2009 12:30:58
|
Blackbeard
JavaBaby
Membro desde: 14/03/2009 13:02:57
Mensagens: 75
Offline
|
Esta aqui o codigo todo resolvido.
Mais uma vez obrigado. Agora só tenho que resolver a questão 2, ordenar por idade, mas isso depois do trabalho e é mais facil. Obrigado pela ajuda.
|
O problema o antecede onde a solução encontra |
|
|
 |
|
|