Como imprimir vetor String de um objeto?

12 respostas
I
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.
package packLista6;
        public class Pais {
//atributos	
        private String nome, capital;
        private double dimensao_km2; 
        private String[] fronteira = new String[0];
//construtor
 public Pais(String n,String c,double d){
    	nome = n;
    	capital = c;
    	dimensao_km2 = d;
    	 
    }
//método
public void fronteiras(){
    	int tamVet = InOutClass.leInt("Insira a quantidade de países que fazem fronteira com " +this.nome);
    	
    	for(int i=0;i<tamVet;i++){
    		this.fronteira[i] = InOutClass.leString("Insira o "+(i+1)+"º país que faz fronteira com "+this.nome);
    	}
    	for(int i=0;i<tamVet;i++){
    		System.out.print(i);
    	}
package packLista6;

    public class PaisMain {

	 public static void main(String[] args) {
//objetos	    	
        Pais objeto1 = new Pais("brasil", "brasilia", 500.000);
		Pais objeto2 = new Pais("argentina", "buenos aires", 200.000);
		Pais objeto3 = new Pais("EUA", "washington", 800.000);
        Pais objeto4 = new Pais("brasil", "brasilia", 400.000);
//chamando o método	
         objeto2.fronteiras();

Gostaria de ajuda, pois desse jeito que eu fiz está dando erro.

12 Respostas

pmlm

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

cara, o Array deve ser inicializado DEPOIS que vc descobriu o tamanho dele.

Vc está iniciando com 0.

I

Valeu pessoal, fiz assim e deu certo:

public class Pais {
	private String nome, capital;
        private double dimensao_km2; 


        public void fronteiras(){
    	int tamVet = InOutClass.leInt("Insira a quantidade de países que fazem fronteira com " +this.nome);
    	String[] fronteira = new String[tamVet];
    	
    	for(int i=0;i<tamVet;i++){
    		fronteira[i] = InOutClass.leString("Insira o "+(i+1)+"º país que faz fronteira com "+this.nome);
    	}
    	for(int i=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);
    }
    }
public class PaisMain {

	public static void main(String[] args) {
		Pais objeto1 = new Pais("brasil", "brasilia", 500.000);
		Pais objeto2 = new Pais("argentina", "buenos aires", 200.000);
		Pais objeto3 = new Pais("EUA", "washington", 800.000);
                Pais objeto4 = new Pais("brasil", "brasilia", 400.000);
	
	
    objeto2.fronteiras();
	}
	
}
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

Ok, mas pode me dizer porque q com esse construtor ta dando erro?

public class Pais {
	private String nome, capital;
    private double dimensao_km2; 
    private int tamanho;
    private String[] fronteira = new String[tamanho];
   
    
    public Pais(String n,String c,double d,int t){
    	nome = n;
    	capital = c;
    	dimensao_km2 = d;
    	tamanho = t;
    	for(int i=0;i<tamanho;i++){
    		this.fronteira[i]=InOutClass.leString("insira um pais que faça fronteira com "+this.nome);
    	}
    }
    }
public static void main(String[] args) {
		Pais objeto1 = new Pais("brasil", "brasilia", 500.000,3);
		}
Não estou conseguindo preencher o vetor
pmlm

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
Acho que é porque eu não sei como fazer isso :-) . O que eu devo colocar no lugar das interrogações?
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);
    	}
    	
    }
public class PaisMain {

	public static void main(String[] args) {
		Pais objeto1 = new Pais("brasil", "brasilia", 500.000,???????);
	
    objeto1.fronteiras();
	}
	
}
E

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

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.

public class Pais {  
    private String nome;
    private String capital;  
    private double area;   
    private int tamanho;  
    private String[] fronteiras;  
         
    public Pais(String n,String c,double d,int t, String[] f){  
        nome = n;  
        capital = c;  
        area = a;  
        tamanho = t;  
        fronteiras = f;
    }  

    // getters & setters
    // ...
}

Agora no teu Main tens de pedir os dados ao utilizador para criares os objectos

public class PaisMain {  
  
    public static void main(String[] args) {  

        String nomePais = //lê país do utilizador?
        //lê outros parâmetros
        String[] fronteiras = leFronteiras(nomePais);
        Pais objeto1 = new Pais(nomePais, ...[outrosParametros]..., fronteiras);  
    }  
     
    private static String[] fronteiras(String nome){  
        int tamVet = InOutClass.leInt("Insira a quantidade de países que fazem fronteira com " + nome);  
          
        String[] fronteiras = new String[tamVet];
        for(int i = 0; i < tamVet; i++){  
            fronteiras[i] = InOutClass.leString("Insira o " + (i + 1) + "º país que faz fronteira com " + nome);  
        }  
        return fronteiras;
    }
}
R

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
Valeu pessoal eu consegui. Ficou assim:
public class Pais {
	private String nome, capital;
        private double dimensao_km2; 
        private int tamanho;
        private String[] fronteiras;

public Pais(String n,String c,double d,int t){
    	this.nome = n;
    	this.capital = c;
    	this.dimensao_km2 = d;
    	this.tamanho = t;
    	this.fronteiras = new String[tamanho];
    }
//getters e setters...
   //O metodo:
public void fronteirasMetodo(){
    	
		for(int j=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(int j=0;j<this.fronteiras.length;j++){
    		System.out.println(this.fronteiras[j]);	
    	}
public class PaisMain {

	public static void main(String[] args) {
		  
		Pais objeto1 = new Pais("brasil", "brasilia", 400000,3);
		
                objeto1.fronteirasMetodo();
	}
	
}
Criado 4 de janeiro de 2013
Ultima resposta 9 de jan. de 2013
Respostas 12
Participantes 5