执行对象列表的代码出错

时间:2015-03-29 01:35:43

标签: java list

我试图做一个对象列表,但是当我尝试插入第二个元素时,第一个元素也会改变,我意识到它看起来像一个静态问题,但我的对象不是&#39 ; t静态,我在这里看了其他问题,但没有设法解决。

对象的代码:

import java.io.*;
import java.util.*;
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 

class PropriedadeArquivo{

   private String ip;
   private String nome;
   private String caminho;
   private String permissao;
   private int tamanho;
   private Date dataAcesso;
   private Date dataModificado;
   private String dono;

//----------------metodos-construtores-------------------------------------------
   public PropriedadeArquivo(){


   this.ip= "";
   this.nome="";
   this.caminho="";
   this.permissao="";
   this.tamanho=0;
   this.dataAcesso= new Date();
   this.dataModificado= new Date();
   this.dono="";

   }

   public PropriedadeArquivo(String ip, String nome, String caminho, String permissao, int tamanho, Date dataAcesso, Date dataModificado, String dono){
      this.ip= ip;
      this.nome=nome;
      this.caminho=caminho;
      this.permissao=permissao;
      this.tamanho=tamanho;
      this.dataAcesso=dataAcesso;
      this.dataModificado=dataModificado;
      this.dono=dono;
   }
//--------------------------------------gets-e-sets--------------------------------------------------
//-----IP-----------
   public String getIp(){

      return ip;

   }
   public void setIp(String x){

      ip=x;
   }
//------nome----------
   public String getNome(){

      return nome;

   }
   public void setNome(String x){

      nome=x;
   }
//------caminho----------
   public String getCaminho(){

      return caminho;

   }
   public void setCaminho(String x){

      caminho=x;
   }
//------permissao----------
   public String getPermissao(){

      return permissao;

   }
   public void setPermissao(String x){

      permissao=x;
   }
//------tamanho----------
   public int getTamanho(){

      return tamanho;

   }
   public void setTamanho(int x){

      tamanho=x;
   }
//------dataAcesso----------
   public Date getDataAcesso(){    

      return dataAcesso;

   }
   public void setDataAcesso(String x)throws Exception{
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      dataAcesso = sdf.parse(x);
      sdf.format(dataAcesso); 

   }
   public void setDataAcesso(Date x){

      dataAcesso=x;
   }

//------dataModificado----------
   public Date getDataModificado(){

      return dataModificado;

   }
   public void setDataModificado(String x)throws Exception{

      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      dataModificado = sdf.parse(x);
      sdf.format(dataModificado); 
   }
   public void setDataModificado(Date x){

      dataModificado=x;
   }

//------dono----------
   public String getDono(){

      return dono;

   }
   public void setDono(String x){

      dono=x;
   }
}

列表的代码:

import java.io.*;
import java.util.*;


class Lista {
   private static PropriedadeArquivo[] array;
   private static int n;

//----------------metodos-construtores-------------------------------------------
   /**
    * Construtor da classe.
    */
   public Lista () {
      array = new PropriedadeArquivo[100];
      n=0;
   }


   /**
    * Construtor da classe.
    * @param tamanho Tamanho da lista.
    */
   public Lista (int tamanho){
      array = new PropriedadeArquivo[tamanho];
      n = 0;
   }

//----------------metodos-aux-------------------------------------------
 //metodo para clonar o objeto e retornar o clone
   public static PropriedadeArquivo clone(PropriedadeArquivo x){

      //PropriedadeArquivo[] clone = new PropriedadeArquivo[x.length];
      PropriedadeArquivo clone = new PropriedadeArquivo();

      //for(int i=0; i < x.length(); i++){

      clone.setIp(x.getIp());
      clone.setNome(x.getNome());
      clone.setCaminho(x.getCaminho());
      clone.setPermissao(x.getPermissao());
      clone.setTamanho(x.getTamanho());
      clone.setDataAcesso(x.getDataAcesso());
      clone.setDataModificado(x.getDataModificado());
      clone.setDono(x.getDono());

          //    }

      return clone;
   }






//-------------------------insertion-methods---------------------------------------
//----------------   
   /* Insere um elemento na primeira posicao da lista e move os demais
    * elementos para o fim da lista.
    * @throws Exception Se a lista estiver cheia.
    */
   public static void inserirInicio(PropriedadeArquivo x) throws Exception {
         //validar insercao
      if(n >= array.length){
         throw new Exception("Erro ao inserir!");
      } 

      //levar elementos para o fim do array
      for(int i = n; i > 0; i--){


         array[i] = array[i-1];
      }
      array[0] = x;
      n++;
   }

//----------------
   /* Insere um elemento na ultima posicao da lista.
    * @param x int elemento a ser inserido.
    * @throws Exception Se a lista estiver cheia.
    */
   public static void inserirFim(PropriedadeArquivo x) throws Exception {

      PropriedadeArquivo a = new PropriedadeArquivo () ;

      //validar insercao
      if(n >= array.length){
         throw new Exception("Erro ao inserir!");
      }
      a = clone(x);
      array[n] = a;
      n++;
   }

//----------------
    /* Insere um elemento em uma posicao especifica e move os demais
    * elementos para o fim da lista.
    * @param x int elemento a ser inserido.
    * @param pos Posicao de insercao.
    * @throws Exception Se a lista estiver cheia ou a posicao invalida.
    */
   public static void inserirMeio(PropriedadeArquivo x, int pos) throws Exception {

      //validar insercao
      if(n >= array.length || pos < 0 || pos > n){
         throw new Exception("Erro ao inserir!");
      }

      //levar elementos para o fim do array
      for(int i = n; i > pos; i--){
         array[i] = array[i-1];
      }

      array[pos] = x;
      n++;
   }

//--------------------------remotion methods------------------------------------------ 
   /* Remove um elemento da primeira posicao da lista e movimenta 
    * os demais elementos para o inicio da mesma.
    * @return resp int elemento a ser removido.
    * @throws Exception Se a lista estiver vazia.
    */
   public static PropriedadeArquivo removerInicio() throws Exception {

      //validar remocao
      if (n == 0) {
         throw new Exception("Erro ao remover!");
      }

      PropriedadeArquivo resp = array[0];
      n--;

      for(int i = 0; i < n; i++){
         array[i] = array[i+1];
      }

      return resp;
   }

//----------------
   /**
    * Remove um elemento da ultima posicao da lista.
    * @return resp int elemento a ser removido.
    * @throws Exception Se a lista estiver vazia.
    */
   public static PropriedadeArquivo removerFim() throws Exception {

      //validar remocao
      if (n == 0) {
         throw new Exception("Erro ao remover!");
      }

      return array[--n];
   }

//----------------
   /**
    * Remove um elemento de uma posicao especifica da lista e 
    * movimenta os demais elementos para o inicio da mesma.
    * @param pos Posicao de remocao.
    * @return resp int elemento a ser removido.
    * @throws Exception Se a lista estiver vazia ou a posicao for invalida.
    */
   public static PropriedadeArquivo removerMeio(int pos) throws Exception {

      //validar remocao
      if (n == 0 || pos < 0 || pos >= n) {
         throw new Exception("Erro ao remover!");
      }

      PropriedadeArquivo resp = array[pos];
      n--;

      for(int i = pos; i < n; i++){
         array[i] = array[i+1];
      }

      return resp;
   }

//-------------------------show method--------------------------------
   /**
    * Mostra os elementos da lista separados por espacos.
    */
   public static void mostrar (){
      System.out.print("[");
      for(int i = 0; i < n; i++){
         System.out.print(array[i].getIp() + " ");
         System.out.print(array[i].getNome() + " ");
         System.out.print(array[i].getCaminho() + " ");
         System.out.print(array[i].getPermissao() + " ");
         System.out.print(array[i].getTamanho() + " ");
         System.out.print(array[i].getDataAcesso() + " ");
         System.out.print(array[i].getDataModificado() + " ");
         System.out.println(array[i].getDono() + " ");


      }
      System.out.println("]");
   }

   //imprime apenas o elemento passado
   public static void imprimir (PropriedadeArquivo x){
      System.out.print("[");
      System.out.print(x.getIp() + " ");
      System.out.print(x.getNome() + " ");
      System.out.print(x.getCaminho() + " ");
      System.out.print(x.getPermissao() + " ");
      System.out.print(x.getTamanho() + " ");
      System.out.print(x.getDataAcesso() + " ");
      System.out.print(x.getDataModificado() + " ");
      System.out.print(x.getDono() + " ");


      System.out.println("]");
   }

   /**
    * Procura um elemento e retorna se ele existe.
    * @param x int elemento a ser pesquisado.
    * @return <code>true</code> se o array existir,
    * <code>false</code> em caso contrario.
    */
   public static boolean pesquisar(PropriedadeArquivo x) {
      boolean retorno = false;
      for (int i = 0; i < n && retorno == false; i++) {
         retorno = (array[i] == x);
      }
      return retorno;
   }

//----------------write object method---------------------------
   public static PropriedadeArquivo escrever() throws Exception{
      String escolhaUsuario;
      int escolhaInt;
      PropriedadeArquivo resp = new PropriedadeArquivo();
      BufferedReader leitor = new BufferedReader(new InputStreamReader(System.in)); 

      //Setando os atributos
      System.out.print("Coloque o IP: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setIp(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque o Nome: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setNome(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque o Caminho: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setCaminho(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque a permissao: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setPermissao(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque o Tamanho: ");
      escolhaInt=Integer.parseInt(leitor.readLine()); 
      resp.setTamanho(escolhaInt);
      System.out.println("Valor escolhido:" + escolhaInt);

      System.out.print("Coloque a data de acesso: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setDataAcesso(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque a data que foi modificado: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setDataModificado(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);

      System.out.print("Coloque o Dono: ");
      escolhaUsuario=leitor.readLine(); 
      resp.setDono(escolhaUsuario);
      System.out.println("Valor escolhido:" + escolhaUsuario);


      return resp;
   }
//--------------------------------------main--------------------------------------------------
   public static void main(String[] args){
      int escolhaUsuario;
      Lista lista= new Lista(100);

      try{ 
         System.out.println("1) II");
         System.out.println("2) IM");
         System.out.println("3) IF");
         System.out.println("4) RI");
         System.out.println("5) RM");
         System.out.println("6) RF");
         System.out.println("7) Listar");
         System.out.println("8) Salvar Arquivo");
         System.out.println("9) Sair");

         do{
            FileOutputStream arq = new FileOutputStream("ArquivoSaida.txt");
            ObjectOutputStream arquivoSaida = new ObjectOutputStream(arq);
            BufferedReader leitor = new BufferedReader(new InputStreamReader(System.in)); 
            System.out.print("Sua escolha e: ");
            escolhaUsuario=Integer.parseInt(leitor.readLine()); 

            if(escolhaUsuario < 1 || escolhaUsuario > 9){System.out.println("Coloque uma opcao valida!");}    

            switch(escolhaUsuario){

               case 1:
                  inserirInicio(escrever());
                  break;
               case 2:
                  System.out.print("Qual posicao voce quer inserir? ");
                  int posicao=Integer.parseInt(leitor.readLine());      
                  inserirMeio(escrever(), posicao);
                  break;
               case 3:
                  inserirFim(escrever());
                  break;
               case 4:removerInicio();
                  break;
               case 5:System.out.print("Qual posicao voce quer remover? ");
                  int posicaoRemover=Integer.parseInt(leitor.readLine());      
                  System.out.println("Elemento removido na posicao " + posicaoRemover + ":");
                  imprimir(array[posicaoRemover]);
                  removerMeio(posicaoRemover);
                  break;
               case 6:removerFim();
                  break;

               case 7:mostrar();
                  break;
               case 8:
                  arquivoSaida.writeObject(lista);
                  break;      
               case 9:
                  arquivoSaida.close();

                  break;


            }
         }while(escolhaUsuario!=9);

      }
      catch(Exception erro){
         System.out.println(erro.getMessage());
      }



   }
}

输出:

after the first element
    [a1 a2 a3 a4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 a6 
    ]
    after the second element
    [b1 b2 b3 b4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 b6 
    b1 b2 b3 b4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 b6 
    ]
after the third element

   [c1 c2 c3 c4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 c6 
    c1 c2 c3 c4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 c6
    c1 c2 c3 c4 5 Sat Mar 28 00:00:00 BRT 2015 Sat Mar 28 00:00:00 BRT 2015 c6 
    ]

0 个答案:

没有答案