我试图做一个对象列表,但是当我尝试插入第二个元素时,第一个元素也会改变,我意识到它看起来像一个静态问题,但我的对象不是&#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
]