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.
//import java.util.LinkedList;//import java.util.List;publicclassVetorDePessoas{// public Pessoa[] pessoa = new LinkedList<Pessoa>();Pessoa[]pessoa;privateinti=0;//construtor/** * @param tamanhoMax */publicVetorDePessoas(inttamanhoMax){pessoa=newPessoa[tamanhoMax];}// metodo inserepublicvoidinserir(Pessoapessoas){if(i<pessoa.length){pessoa[i++]=pessoas;}}publicvoidlistagem(){for(intaux=0;aux<i;aux++){// System.out.println("Vetor [" +pessoa[aux].nome);((Pessoa)pessoa[aux]).mostrarPessoa();}}// metodo bolhapublicvoidbolha(){intout,in,i=0;// ordena o valor ate o começo do vetor i-1 que significa que nao esta// zerado o decrementofor(out=i-1;out>0;out--){for(in=0;in<out;in++){if(pessoa[in]>pessoa[in+1]){Pessoaaux=pessoa[in];pessoa[in]=pessoa[in+1];pessoa[in+1]=aux;}}}}
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) ??
olivercld
não estou conseguindo tentei todas as formas ditas aqui, continua com erros
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 ?
é 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.
olivercld
ok Marcelo de Andrade entendido
fernandosavio
Se tu quiser alterar teu código e der erro é só postar o código e os erros para podermos te ajudar…
olivercld
sim sim fernandosavio valeu…
olivercld
bom seguinte o . Length esta dando um erro então comparei dessa forma e o erro não mostra mais esta errado ?
no lugar de .lenght coloquei para .altura // o lenght daria o tamanho total do vetor seria isso ? e o altura ?
fernandosavio
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éumatributo(variável)daestruturavetorSystem.out.println("Tamanho do vetor: "+pessoa.length);Stringpalavra="abcde";//lengthéummétododaclasseStringquecontaquantasletrastemaStringeretornaparaquemchamouSystem.out.println("Tamanho da palavra: "+palavra.length());
publicclassClassePrincipal{publicstaticvoidmain(String[]args){Pessoav1=newPessoa(null,100);Scannerentrada=newScanner(System.in);intopcao;System.out.println("\n Escolha uma Opçao ");System.out.println("(1) Listar ");System.out.println("(2) Bolha ");opcao=entrada.nextInt();switch(opcao){case1:break;case2:v1.break;default:}
aqui esta o problema agora ja alterei nas outras classes so nao estou conseguindo chamar na 1 opcao o metodo listar e 2 o mtodo bolha para ordenar, so consigo v1.mostrarPessoa(); so me da opacao desse metodo.
fernandosavio
Em que classe está o método bolha e o listagem ???
olivercld
Esses metodos estao dentro dessa classe: public class VetorDePessoas{ postei elas logo no começo as duas classes … public class Pessoa {
olivercld
publicclassPessoa{Stringnome;int[]altura;publicintlenght;publicPessoa(Stringn,inta){this.nome=n;altura=newint[a];}publicintAltura(){returnaltura.length;}//metodo mostrar pessoa//public void mostrarPessoa(){//System.out.println("Nome: " + nome + "Altura" +altura);//}//public void mostrarPessoa() {//System.out.println("Nome: " + nome + "Altura" +altura);//}}
publicclassVetorDePessoas{// public Pessoa[] pessoa = new LinkedList<Pessoa>();Pessoa[]pessoa;privateinti=0;// construtor/** * @param tamanhoMax */publicVetorDePessoas(inttamanhoMax){pessoa=newPessoa[tamanhoMax];}// metodo inserepublicvoidinserir(Pessoapessoas){if(i<pessoa.length){pessoa[i++]=pessoas;}}//metodo listarpublicvoidlistagem(){for(intaux=0;aux<i;aux++){System.out.println("Vetor ["+pessoa[aux].nome+"]");//((Pessoa) pessoa[aux]).mostrarPessoa();}}// metodo bolhapublicvoidbolha(){for(inti=0;i<(pessoa.length-1);i++){if(pessoa[i].lenght>pessoa[i+1].lenght){Pessoaaux=pessoa[i+1];pessoa[i+1]=pessoa[i];pessoa[i]=aux;
essas duas classes
fernandosavio
Cara.. ficou muito confusa sua classe... Tem length onde nao precisava, tem vetor onde não precisa..
Eu fiz um exemplo rápido aqui para você ver...
Classe Pessoa:
public class Pessoa {
public String nome;
public double altura;
public Pessoa(String nome, double altura) {
this.nome = nome;
this.altura = altura;
}
}
Classe OrdenaBolha.java:
publicclassOrdenaBolha{publicstaticvoidmain(Stringargs[]){//Inicializa vetor de pessoasPessoa[]listaPessoas=newPessoa[]{newPessoa("pessoa1",1.70),newPessoa("pessoa2",1.50),newPessoa("pessoa3",1.90),newPessoa("pessoa4",2.00),newPessoa("pessoa5",1.80)};metodoBolha(listaPessoas);//ordena o VetorimprimePessoas(listaPessoas);//imprime o Vetor}publicstaticvoidmetodoBolha(Pessoa[]variasPessoas){for(inti=0;i<variasPessoas.length-1;i++){if(variasPessoas[i].altura>variasPessoas[i+1].altura){Pessoaaux=variasPessoas[i+1];variasPessoas[i+1]=variasPessoas[i];variasPessoas[i]=aux;}}}publicstaticvoidimprimePessoas(Pessoa[]muitasPessoas){for(inti=0;i<muitasPessoas.length;i++){System.out.print("Nome: "+muitasPessoas[i].nome);System.out.println("\tAltura: "+muitasPessoas[i].altura+"m");}}}
Você está complicando a estrutura das suas classe. Olha essas para ter uma idéia, qualquer pergunta sobre o código pode chamar!
olivercld
vou tentar aqui arrumar o codigo se nao conseguir continuo amanha obrigado fernandosavio. estou em cima disso faz horas.
olivercld
fernandosavio tentei seguir seu codigo aqui me perdi ja nao estou entendendo nada, nao consigo chamar os metodos como voçe chamou bom eu preciso fazer 3 classes : 1 classe Pessoa, 2 classeVetorDePessoas, 3 classe Principal onde contem a main.
a classe1 e so a definição da interface.
euprecisofazerummenuparausuarioescolherehoraquevouchamarometodoparalistaounaopcao2paraordenarpelometodobolhanaoda.publicclassClassePrincipal{publicstaticvoidmain(String[]args){//inicializa o vetor de pessoasVetorDePessoas[]listapessoa=newVetorDePessoas[]{newVetorDePessoas("JOao",1.80),newVetorDePessoas("Antonio",1.65),newVetorDePessoas("Pessoa ",2.00),newVetorDePessoas("Fullano",1.70)};Scannerentrada=newScanner(System.in);intopcao;System.out.println("\n Escolha uma Opcao ");System.out.println("(1) Listar ");System.out.println("(2) Bolha ");opcao=entrada.nextInt();switch(opcao){case1:lisbreak;case2:break;default:}}}
olivercld não faz sentido ter uma classe VetordePessoas… Faz mais sentido ter um vetor de objetos Pessoas…
Se você puder postar o enunciado da questão ficaria melhor de entender o que ela pede…
olivercld
aqui esta como me pediu fernandosavio
olivercld
fiz de um jeito não da erro mais não da certo faço de outro da erro aff.
fernandosavio
Muito bem cara… Me prestei a fazer para você o exercício. Mas é muito importante que você leia e tente entender o que eu fiz…
OK, vamos lá.
Classe Pessoa
/*Criar uma classe Pessoa que armazene o nome e a altura de uma pessoa. Esta classe deverápossuir os métodos:construtor ? instancia o objeto com o nome e a altura da pessoa;altura ? retorna a altura de uma pessoa;mostra ? apresenta o nome e a altura da pessoa;*/publicclassPessoa{privateStringnome;privatedoublealtura;publicPessoa(StringnomeRecebido,doublealturaRecebida){this.nome=nomeRecebido;this.altura=alturaRecebida;}publicdoublegetAltura(){returnthis.altura;}publicvoidmostraPessoa(){System.out.println("Nome: "+this.nome+"\tAltura: "+altura);}}
Classe VetorDePessoas
/* Criar uma classe ?VetorDePessoas? que armazene um vetor de pessoas (o tamanho máximo dovetor deve ser passado no programa principal). A classe deverá possuir os métodos:construtor ? define o tamanho máximo do vetor;insere ? insere uma nova pessoa no vetor;listagem ? mostra todas as pessoas cadastradas no vetor;classifica - utiliza um dos métodos de classificação para ordenar o vetor pela altura das pessoas. */publicclassVetorDePessoas{privateinttamanhoMax;publicintultimoInserido=0;privatePessoa[]listaPessoas;publicVetorDePessoas(inttamanho){this.tamanhoMax=tamanho;listaPessoas=newPessoa[tamanho];}publicvoidinsere(Pessoap){if(ultimoInserido<tamanhoMax){listaPessoas[ultimoInserido]=p;ultimoInserido++;}}publicvoidlistagem(){for(inti=0;i<ultimoInserido;i++){listaPessoas[i].mostraPessoa();}}publicvoidordena(){booleanhouveTroca;do{houveTroca=false;for(inti=0;i<ultimoInserido-1;i++){if(listaPessoas[i].getAltura()>listaPessoas[i+1].getAltura()){Pessoaaux=listaPessoas[i];listaPessoas[i]=listaPessoas[i+1];listaPessoas[i+1]=aux;houveTroca=true;}}}while(houveTroca);//Se percorreu o vetor inteiro e não precisou trocar é porque já está ordenado}}
Classe Principal
/**Criar um programa principal que mostre ao usuário:No início do programa solicitar o tamanho máximo do vetorUm menu para inserir os dados, classificar e listar o vetor */importjava.util.Scanner;publicclassPrincipal{publicstaticvoidmain(Stringargs[]){System.out.print("Digite o tamanho do vetor: ");Scannerin=newScanner(System.in);inttam=in.nextInt();VetorDePessoasvetPes=newVetorDePessoas(tam);intopcao;do{System.out.print("\n1-Inserir dados\n2-Ordenar dados\n3-Mostrar dados\nOpcao: ");opcao=in.nextInt();switch(opcao){case1:vetPes.ultimoInserido=0;for(inti=0;i<tam;i++){System.out.print((i+1)+"-Digite o nome: ");Stringnome=in.next();System.out.print((i+1)+"-Digite a altura: ");doublealtura=in.nextDouble();vetPes.insere(newPessoa(nome,altura));}break;case2:vetPes.ordena();break;case3:vetPes.listagem();break;case0:break;default:System.out.print("Opcao nao existe!");break;}}while(opcao!=0);}}
Tenta entender o que eu fiz e qualquer coisa pergunta!
olivercld
ok eu vou comentar, tentar explicar colocando comentarios no codigo seu ai posto aqui denovo e tu me fala se esta certo como comentei da maneira que entendi ok valeu fernandosavio obrigadão fera.
olivercld
publicclassPessoa{privateStringnome;// atributos da classeprivatedoublealtura;/** * @author fernandosavio * @param nomeRecebido * @param alturaRecebida */// construtor, ele recebe como parametro nomeRecebido e alturaRecebidapublicPessoa(StringnomeRecebido,doublealturaRecebida){this.nome=nomeRecebido;this.altura=alturaRecebida;}//public String getNome() {//return nome;//}//public void setNome(String nome) {// this.nome = nome;//}//public void setAltura(double altura) {// this.altura = altura;//}// metodo para retorna a alturapublicdoublegetAltura(){returnthis.altura;}// metodo para mostrar os nomes e a altura das pessoaspublicvoidmostraPessoa(){System.out.println("Nome: "+this.nome+"\tAltura: "+altura);}}
publicclassVetorDePessoas{// atributos publico e privadoprivateinttamanhoMax;// definindo tamanho maximopublicintultimoInserido=0;// ??privatePessoa[]listaPessoas;// cria se o vetor/** * @author fernandosavio * @param tamanho */// construtorpublicVetorDePessoas(inttamanho){this.tamanhoMax=tamanho;listaPessoas=newPessoa[tamanho];// objeto ListasPessoas = new Pessoa}// metodo insere para inserir uma lista de pessoas no meu vetorpublicvoidinsere(Pessoap){// Pessoa p e criada um novo parametro pif(ultimoInserido<tamanhoMax){// se ultimoinserido menor que// tamanho maxlistaPessoas[ultimoInserido]=p;// ??ultimoInserido++;// ultimo a ser inserido incrementa}}// metodo listagem para listar as pessoas com nome a alturapublicvoidlistagem(){for(inti=0;i<ultimoInserido;i++){// i de 0 ate < que o ultimo// elementolistaPessoas[i].mostraPessoa();// listaPessoas na posicao i aponta,// recebe metodo mostraPessoa}}// metodo bolha ordena o vetor de pessoas por alturapublicvoidordena(){booleanhouveTroca;// boolen para verificar se e verdadeiro ou falsodo{houveTroca=false;// verifica se houve troca no caso e falsofor(inti=0;i<ultimoInserido-1;i++){// para int i de 0 ate i menor que ultimo -1, o ultimo -1// significa que e o ultimo elemento.?if(listaPessoas[i].getAltura()>listaPessoas[i+1].getAltura()){// se listaPessoas na posicao tal "compara pelo metodo// altura", for maior que listaPessoas na posicao i + 1 que// a segunda posicao// se for maior entao trocaPessoaaux=listaPessoas[i];// vetor Pessoa aux armazena o// valor na posicao i caso// for maior para trocarlistaPessoas[i]=listaPessoas[i+1];listaPessoas[i+1]=aux;houveTroca=true;//mostra que houve a trova e verdadeira }}}while(houveTroca);// Se percorreu o vetor inteiro e não precisou// trocar é porque já está ordenado}}
/** * @author fernandosavio */importjava.util.Scanner;publicclassClassePrincipal{publicstaticvoidmain(Stringargs[]){// pede para usuario digitar um tamanho do vetorSystem.out.print("Digite o tamanho do vetor: ");Scannerin=newScanner(System.in);// le do tecladointtam=in.nextInt();// tam recebe valor que usuario digitou// cria o vetor VetorDePessoas vetPes que recebe como valor tam o que// usuario digitouVetorDePessoasvetPes=newVetorDePessoas(tam);intopcao;do{//faz o analise enquanto opcao for diferente de zero System.out.print("\n1-Inserir dados\n2-Ordenar dados\n3-Mostrar dados\nOpcao: ");opcao=in.nextInt();switch(opcao){case1:vetPes.ultimoInserido=0;// o objeto vetPes aponta, recebe o// ultimoInserido ??for(inti=0;i<tam;i++){// para int i ate menor que tamaho que usuario digitouSystem.out.print((i+1)+"-Digite o nome: ");// i + 1// incrementa ate chegar ao tamanho que usuario digitou no tamStringnome=in.next();System.out.print((i+1)+"-Digite a altura: ");doublealtura=in.nextDouble();vetPes.insere(newPessoa(nome,altura));// ??}break;case2://opcao 2 ira ordenar pelo metodo bolhavetPes.ordena();break;case3://ira listar pelo metodo listagem vetPes.listagem();break;case0://para fazer o analise enquanto for diferente de 0. ?break;default:System.out.print("Opcao nao existe!");break;}}while(opcao!=0);}}
Poderia analisar os comentários fernandosavio se esta de acordo, como eu comentei foi modo que procurei entender e onde eu coloquei apenas o ponto de interrogação ?? é onde está a duvida que não entendi muito bem.
muito obrigado desde já pela sua paciência de me explicar.
No guardo de suas resposta quanto ao comentários no código.
olivercld
so uma obs: no seu codigo aqui fernandosavio, depois de comentar, fui executar e quando optei pela opçao 2 que ordenar pelo metodo bolha, nao deu certo, ou seja aparece para mim o menu novamente no caso o case 2: nao esta dando certo