Oi pessoal, quero imprimir um vetor de string por meio de um método. Este método está na classe em que estão declarados os atributos do objeto.
packagepackLista6;publicclassPais{//atributos privateStringnome,capital;privatedoubledimensao_km2;privateString[]fronteira=newString[0];//construtorpublicPais(Stringn,Stringc,doubled){nome=n;capital=c;dimensao_km2=d;}//métodopublicvoidfronteiras(){inttamVet=InOutClass.leInt("Insira a quantidade de países que fazem fronteira com "+this.nome);for(inti=0;i<tamVet;i++){this.fronteira[i]=InOutClass.leString("Insira o "+(i+1)+"º país que faz fronteira com "+this.nome);}for(inti=0;i<tamVet;i++){System.out.print(i);}
packagepackLista6;publicclassPaisMain{publicstaticvoidmain(String[]args){//objetos Paisobjeto1=newPais("brasil","brasilia",500.000);Paisobjeto2=newPais("argentina","buenos aires",200.000);Paisobjeto3=newPais("EUA","washington",800.000);Paisobjeto4=newPais("brasil","brasilia",400.000);//chamando o método objeto2.fronteiras();
Gostaria de ajuda, pois desse jeito que eu fiz está dando erro.
O array fronteira não deve ser inicializado como um array vazio na criação do objecto. Apenas deve ser inicializado com o tamanho certo depois de saberes qual é o tamanho.
J
junioredmar
cara, o Array deve ser inicializado DEPOIS que vc descobriu o tamanho dele.
Vc está iniciando com 0.
I
igaoJava
Valeu pessoal, fiz assim e deu certo:
publicclassPais{privateStringnome,capital;privatedoubledimensao_km2;publicvoidfronteiras(){inttamVet=InOutClass.leInt("Insira a quantidade de países que fazem fronteira com "+this.nome);String[]fronteira=newString[tamVet];for(inti=0;i<tamVet;i++){fronteira[i]=InOutClass.leString("Insira o "+(i+1)+"º país que faz fronteira com "+this.nome);}for(inti=0;i<tamVet-1;i++){System.out.print(fronteira[i]+", ");}System.out.print(fronteira[tamVet-1]+". ");//System.out.print("o país "+this.nome+" faz fronteira com: "+this);}}
Mas e se eu quisesse colocar o vetor como um atributo do objeto, necessáriamente private (Ex: private String[] fronteira = new String[?];), e podendo variar o tamanho desse vetor para cada objeto q eu instanciasse? Como eu deve ficar esse atributo na classe do objeto, e depois como preencho o vetor para um objeto específico?
pmlm
Ninguém disse que não podias ter o vector como atributo do objecto. Apenas que deveria ser inicializado depois de saberes o tamanho.
I
igaoJava
Ok, mas pode me dizer porque q com esse construtor ta dando erro?
publicclassPais{privateStringnome,capital;privatedoubledimensao_km2;privateinttamanho;privateString[]fronteira=newString[tamanho];publicPais(Stringn,Stringc,doubled,intt){nome=n;capital=c;dimensao_km2=d;tamanho=t;for(inti=0;i<tamanho;i++){this.fronteira[i]=InOutClass.leString("insira um pais que faça fronteira com "+this.nome);}}}
Olha para as variáveis nome, capital, dimensao_km2, tamanho… todas são declaradas no objecto e inicializadas no construtor. Porque é que queres fazer diferente com o array fronteira?
I
igaoJava
Acho que é porque eu não sei como fazer isso :-) .
O que eu devo colocar no lugar das interrogações?
publicPais(Stringn,Stringc,doubled,intt,String[]f){nome=n;capital=c;dimensao_km2=d;tamanho=t;for(inti=0;i<tamanho;i++){f[i]=InOutClass.leString("insira um pais que faça fronteira com "+this.nome);}}
O parâmetro ??? é um array de strings. Portanto, você tem de declarar uma variável que contém um array de strings, e então passá-lo ao construtor.
I
igaoJava
Como assim “declarar uma variável que contém um array de strings”? Eu tentei aqui, dei uma pesquisada, mas não consegui ainda.
Eu queria q esse construtor me permitisse preencher o vetor pro meu objeto. Alguém pode me dar um exemplo?
public Pais(String n,String c,double d,int t,String[]f){
nome = n;
capital = c;
dimensao_km2 = d;
tamanho = t;
for(int i=0;i<tamanho;i++){
f[i]=InOutClass.leString("insira um pais que faça fronteira com "+this.nome);
}Se esse construtor estiver certo, alguém pode me dar um exemplo de como intanciar la no método main pra eu conseguir preencher esse vetor?
pmlm
Um construtor não deve pedir dados ao utilizador, já os deve receber todos.
Agora no teu Main tens de pedir os dados ao utilizador para criares os objectos
publicclassPaisMain{publicstaticvoidmain(String[]args){StringnomePais=//lê país do utilizador?//lê outros parâmetrosString[]fronteiras=leFronteiras(nomePais);Paisobjeto1=newPais(nomePais,...[outrosParametros]...,fronteiras);}privatestaticString[]fronteiras(Stringnome){inttamVet=InOutClass.leInt("Insira a quantidade de países que fazem fronteira com "+nome);String[]fronteiras=newString[tamVet];for(inti=0;i<tamVet;i++){fronteiras[i]=InOutClass.leString("Insira o "+(i+1)+"º país que faz fronteira com "+nome);}returnfronteiras;}}
R
rof20004
public class Pais {
private String nome, capital;
private double dimensao_km2;
private int tamanho;
private String[] fronteira = new String[tamanho];
Cuidado na inicializacao do vetor, pois voce esta definindo o tamanho do mesmo baseado na variavel tamanho, e nesse momento a variavel tamanho = 0;
O certo é voce inicializa-la no construtor, pois la voce define o valor da variavel tamanho.
I
igaoJava
Valeu pessoal eu consegui. Ficou assim:
publicclassPais{privateStringnome,capital;privatedoubledimensao_km2;privateinttamanho;privateString[]fronteiras;publicPais(Stringn,Stringc,doubled,intt){this.nome=n;this.capital=c;this.dimensao_km2=d;this.tamanho=t;this.fronteiras=newString[tamanho];}//getters e setters...//O metodo:publicvoidfronteirasMetodo(){for(intj=0;j<this.tamanho;j++){this.fronteiras[j]=InOutClass.leString("Insira o nome do "+(j+1)+"º país que faz fronteira com "+this.nome);}System.out.println("Os países que fazem fronteira com "+this.nome+" são:");for(intj=0;j<this.fronteiras.length;j++){System.out.println(this.fronteiras[j]);}