我已经设法将所有对象放入arraylist中,但我无法打印所有值。无论使用哪种方法,只有最后一个是被打印的。
它不仅是通过阵列列表打印的,这让我想知道推动的对象是否相同。
如果是,我该如何更改?我已经附加了程序(run fileinput.java(:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
import javax.swing.text.html.HTMLDocument.Iterator;
//lecture notes(L1) method
public class FileInput {
static String first;
static String second;
static String third;
static String fourth;
static String fifth;
static String sixth;
static int num = 1;
public static void main(String[] args)throws FileNotFoundException, IOException{
Scanner input = new Scanner(new File("player.txt"));
String data = null;
PrintWriter output = new PrintWriter("outfile.txt");
// Player1 user = new Player1();
ArrayList<Player1>listOfPlayers = new ArrayList<>();
Player1 user = new Player1();
// Tokenizing
System.out.println("CSCI213 Players Management System");
while(input.hasNextLine()){
System.out.println("nPlayer " + num);
data = input.nextLine();
StringTokenizer token = new StringTokenizer(data,"|");
// int t = token.countTokens();
// System.out.println("t is:" + t);
first = token.nextToken().trim();
user.setLoginname(first);
second = new String(token.nextToken("|"));
user.setPassword(second);
third = new String(token.nextToken("|"));
user.setChips(third);
fourth = new String(token.nextToken("|"));
user.setUsername(fourth);
fifth = new String(token.nextToken("|"));
user.setEmail(fifth);
sixth = new String(token.nextToken("|"));
user.setBirthdate(sixth);
// user.display();
listOfPlayers.add(user);
System.out.println("Size is: " + listOfPlayers.size());
// System.out.println(user.loginname);
// System.out.println(listOfPlayers.get(num-1).loginname);
num++;
// output.write(data);
// output.write("rn");
}
int x = listOfPlayers.size();
System.out.println("Size is: " + x);
System.out.println(listOfPlayers);
// Display address of required
Player1 p = new Player1();
for(int i = 0; i < x; i++){
p = listOfPlayers.get(i);
System.out.println(p.loginname);
}
for(Player1 e:listOfPlayers){
System.out.println(e.loginname);
System.out.println(e.email);
}
while(input.hasNextLine()){
data = input.nextLine();
output.write(data);
output.write("rn");
}
input.close();
output.close();
}
}
// Store all player information
public class Player1 {
static String loginname;
static String password;
static String chips;
static String username;
static String email;
static String birthdate;
/*
public Player1(String loginname, String password,
String username, String email, String birthdate){
this.loginname = loginname;
this.password = password;
this.username = username;
this.email = email;
this.birthdate = birthdate;
}
*/
public Player1() {
// TODO Auto-generated constructor stub
}
public static String getLoginname() {
System.out.print("loginname: ");
return loginname;
}
public static void setLoginname(String loginname) {
Player1.loginname = loginname;
}
public static String getPassword() {
System.out.print("password: ");
return password;
}
public static void setPassword(String password) {
Player1.password = password;
}
public static String getUsername() {
System.out.print("username: ");
return username;
}
public static void setUsername(String username) {
Player1.username = username;
}
public static String getEmail() {
System.out.print("email: ");
return email;
}
public static void setEmail(String email) {
Player1.email = email;
}
public static String getBirthdate() {
System.out.print("birthdate: ");
return birthdate;
}
public static void setBirthdate(String birthdate) {
Player1.birthdate = birthdate;
}
public static String getChips() {
System.out.print("chips: ");
return chips;
}
public static void setChips(String chips) {
Player1.chips = chips;
}
public void display() {
System.out.println("Name: " + this.username);
System.out.println("Email: " + this.email);
System.out.println("Birthdate: " + this.birthdate);
System.out.println("Login ID: " + this.loginname);
System.out.println("Balance Chips: " + this.chips);
}
/*
@Override
public String toString() {
return "toString()=" + this.loginname + "n";
}
*/
}
简单:
Player1 user = new Player1();
您一次又一次地添加相同对象。将该语句放入中,而是将其循环放入。您想在每个循环迭代期间添加完全新的playwer对象!
,但即使那样,事情也无法解决;因为(如Eran所述(:您的玩家类仅具有静态字段。就像"作弊"一样;因为这意味着所有播放器对象也会看到相同的字段(因为 static 字段是共享在类的所有实例之间!(
换句话说:静态是良好的OO设计中的异常。您不会将其用作默认值;相反:您只在特殊的角案例中使字段静态(有关一些示例,请参见此处(。
您有两个错误:
-
您一遍又一遍地将相同的
Player1
实例添加到列表中。您应该将Player1 user = new Player1();
移至添加播放器的循环中。更改
Player1 user = new Player1(); // Tokenizing System.out.println("CSCI213 Players Management System"); while (input.hasNextLine()) {
to
// Tokenizing System.out.println("CSCI213 Players Management System"); while (input.hasNextLine()) { Player1 user = new Player1();
-
Player1
类的成员都是静态的,因此,即使您修复了第一个问题,Player1
的所有实例也将共享这些成员。您应该将它们更改为非静态。更改
public class Player1 { static String loginname; static String password; static String chips; static String username; static String email; static String birthdate;
to
public class Player1 { String loginname; String password; String chips; String username; String email; String birthdate;