Olá Tudo bem…
bom estou com problema aqui não sei oque pode ser ja tentei arrumar no metodo bolha que mais tarde vou usa-lo para ordenar por altura esta dando um erro e nao consigo descobrir vou postar as duas classes eu quero dar continuidade mais com este erro nao consigo desde já agradeço a ajuda.
public class Pessoa {
String nome;
String altura;
public Pessoa(String n, String a) {
this.nome = n;
this.altura = a;
}
public String Altura(){
return altura;
}
//metodo mostrar pessoa
//public void mostrarPessoa(){
//System.out.println("Nome: " + nome + "Altura" +altura);
//}
public void mostrarPessoa() {
System.out.println("Nome: " + nome + "Altura" +altura);
}
}
//import java.util.LinkedList;
//import java.util.List;
public class VetorDePessoas {
// public Pessoa[] pessoa = new LinkedList<Pessoa>();
Pessoa[] pessoa;
private int i = 0;
//construtor
/**
* @param tamanhoMax
*/
public VetorDePessoas(int tamanhoMax) {
pessoa = new Pessoa[tamanhoMax];
}
// metodo insere
public void inserir(Pessoa pessoas) {
if (i < pessoa.length) {
pessoa[i++] = pessoas;
}
}
public void listagem() {
for (int aux = 0; aux < i; aux++) {
// System.out.println("Vetor [" +pessoa[aux].nome);
((Pessoa) pessoa[aux]).mostrarPessoa();
}
}
// metodo bolha
public void bolha() {
int out, in, i = 0;
// ordena o valor ate o começo do vetor i-1 que significa que nao esta
// zerado o decremento
for (out = i - 1; out > 0; out--) {
for(in = 0; in < out; in++){
if(pessoa[in] > pessoa[in + 1]){
Pessoa aux = pessoa[in];
pessoa[in] = pessoa[in +1];
pessoa[in +1] = aux;
}
}
}
}
if(pessoa[in] > pessoa[in + 1]) /????
//Como o compilador vai adivinhar que uma pessoa a maior que a outra?
// Ou você implementa a interface Comparable ou você compara algum atributo da sua classe (altura ou nome), só não pode comparar pessoa com pessoa...
entao fernandosavio eu coloquei dessa forma if(pessoa[in].altura > pessoa[in + 1].altura )
tambem da erro.
ou deveria fazer if(pessoa[in].altura > pessoa[in + 1].nome)
??
não estou conseguindo tentei todas as formas ditas aqui, continua com erros
comparando por altura:
if(altura[in] > altura[in+1]){
int aux = altura[in];
altura[in] = altura[in +1];
altura[in +1] = aux;
Desculpem.
bom consegui fazer dessa maneira
if(pessoa[in].altura > pessoa[in+1].altura){
aux = pessoa[in];
pessoa[in] = pessoa[in +1];
pessoa[in +1] = aux;
mais o erro que dá e que se eu coloco int aux = pessoa diz que impossivel converter de Pessoa para int e agora que faço e porque o atributo la emcima nao esta como int ?
Corrigindo:
if(pessoa[in].altura > pessoa[in+1].altura){
int aux = pessoa[in].altura;
pessoa[in].altura = pessoa[in +1].altura;
pessoa[in +1].altura = aux;
acabaramse os erros do if
Tente desta maneira:
public void bolha() {
for ( int i = 0; i < ( pessoa[i].lenght ) - 1; i++ ) {
if ( pessoa[i] > pessoa[i + 1] ) {
Pessoa aux = pessoa[i + 1];
pessoa[i + 1] = pessoa[i];
pessoa[i] = aux;
}
}
}
Você utilizou muitas variáveis para pouca coisa.
ok vou seguir sua dica Marcelo de Andrade
[code] for (out = i - 1; out > 0; out–) {
for(in = 0; in < out; in++){
if(pessoa[in].altura > pessoa[in+1].altura){
int aux = pessoa[in].altura;
pessoa[in].altura = pessoa[in +1].altura;
pessoa[in +1].altura = aux;
[/code]
mais essa maneira esta errado pois acabaram se os erros
vou tentar sua dica obrigado Marcelo de Andrade
entao brother Marcelo de Andrade tentei sua dica e da erro
no leght diz que nao podesse ser resolvido ou no e um campo
no if (pessoa[i] > pessoa[i + 1]) { diz que e perador > indefido para para o tipo trabalho.Pessoa
Tá tudo muito confuso já!!!
Qual é o problema que está dando agora e qual é o código?
Me atualiza por favor…
O exemplo que mostrei era para você implementar, você só copiou. O que você quer é comparar a altura, então modifique para:
pessoa[i].altura > pessoa[i + 1].altura
E não:
pessoa[i] > pessoa[i + 1]
Posta teu código modificado com o que você fez e como ficou.
entao Brow seguinte o amigo Marcelo de Andrade me deu essa dica
public void bolha() {
for ( int i = 0; i < ( pessoa[i].lenght ) - 1; i++ ) {
if ( pessoa[i] > pessoa[i + 1] ) {
Pessoa aux = pessoa[i + 1];
pessoa[i + 1] = pessoa[i];
pessoa[i] = aux;
}
}
}
eu fiz como tu me falou assim:
public void bolha() {
int out, in, i = 0;
// ordena o valor ate o começo do vetor i-1 que significa que nao esta
// // zerado o decremento
for (out = i - 1; out > 0; out--) {
for (in = 0; in < out; in++) {
if (pessoa[in].altura > pessoa[in + 1].altura) {
int aux = pessoa[in].altura;
pessoa[in].altura = pessoa[in + 1].altura;
pessoa[in + 1].altura = aux;
}
}
}
é dessa forma aqui embaixo acabaram os erros, entao tentei a forma que o amigo Marcelo passou, no codigodele o leght da erro e no if do codigo da como operador > indefinido pra o Trabalho.Pessoa e isso.
agora eu nao sei se continuo dou sequencia e deixo o que nao esta aparecendo o erro ou mecho no codigo que o Marcelo passou.
ok Marcelo de Andrade entendido
Se tu quiser alterar teu código e der erro é só postar o código e os erros para podermos te ajudar…
sim sim fernandosavio valeu…
bom seguinte o . Length esta dando um erro então comparei dessa forma e o erro não mostra mais esta errado ?
for (int i = 0; i < (pessoa[i].altura) - 1; i++) {
if (pessoa[i].altura > pessoa[i + 1].altura) {
int aux = pessoa[i + 1].altura;
pessoa[i + 1].altura = pessoa[i].altura;
pessoa[i].altura = aux;
no lugar de .lenght coloquei para .altura // o lenght daria o tamanho total do vetor seria isso ? e o altura ?
Na verdade olivercld…
Você precisa utilizar o length para percorrer o vetor de pessoas inteiro independente do tamanho que tenha…
Entao é importante você saber:
Pessoa[] pessoa;
//length é um atributo (variável) da estrutura vetor
System.out.println("Tamanho do vetor: " + pessoa.length);
String palavra = "abcde";
//length é um método da classe String que conta quantas letras tem a String e retorna para quem chamou
System.out.println("Tamanho da palavra: " + palavra.length());
Você usou:
//Isso só funcionaria se fosse uma matriz (vetor de vetor), pois você receberia o tamanho do vetor na posição i
System.out.println(pessoas[i].length);
//E esse só funcionaria se fosse um vetor de Strings, retornaria o tamanho da String e não do vetor
System.out.println(pessoas[i].length());
//E esse sim retorna a quantidade de elementos de um vetor
System.out.println(pessoas.length);
Entendeu?
certo estou procurando entender…
bom mudei aqui
ficou assim agora fernandosavio
na classe Pessoa adicionei o atributo public int Lenght, nao acusa mais o erro no lenght
ficou assim agora:
for (int i = 0; i < (pessoa[i].lenght) - 1; i++) {
if (pessoa[i].altura > pessoa[i + 1].altura) {
Pessoa aux = pessoa[i + 1];
pessoa[i + 1] = pessoa[i];
pessoa[i] = aux;
Cara… a tua intenção é ordenar o vetor de Pessoas e para isso tu precisa do tamanho do vetor… E o tamanho do vetor se pega usando:
nomeVetor.length;
//e nao
nomeVetor[i].length;
Entao teu for ficaria assim:
for (int i = 0; i < (pessoa.lenght - 1); i++) {
Enquanto i (que igual a zero) for menor que o tamanho do vetor -1 faça …
Entendeu agora?
haa agora entendi, a questao em si era o [i] e como vc explicou la atraz que:
ok vou proseguir aqui. cara desculpe ai incomodo.
obrigado fernandosavio