【发布时间】:2016-08-24 14:41:57
【问题描述】:
嗯.. 我尽力解释,但是我可以.. 好吧.. 我有这个 text/dat 文件,里面有数据。当我运行代码时,此错误消息“错误!用户名或密码不正确!”尽管用户名和密码已经在文件中。下面是代码、输出和文件。
这是 GameModule.java 的代码:
public void run()
{
System.out.println("FISHING PAIR GAME LOGIN");
Utility.printLine(50);
System.out.println();
ArrayList<Player> players = new ArrayList<>();
Scanner myScanner=null;
try {
myScanner = new Scanner (new File("players.dat"));
while (myScanner.hasNextLine())
{
String data = myScanner.nextLine();
String [] dataSplit = data.split("\\|");
Player existingPlayer = new Player (dataSplit[0], dataSplit[1],dataSplit[2], Integer.parseInt(dataSplit[3]));
players.add(existingPlayer);
}
} catch(FileNotFoundException ex) {
System.out.println("Error! File - players.dat not found!");
}
myScanner.close();
//End of read file into array
Scanner input = new Scanner (System.in);
boolean exist = false;
System.out.print("Enter Login name > ");
String userName = input.nextLine();
System.out.print("Enter Password > ");
String userPW = input.nextLine();
System.out.println();
for (int i=0; i < players.size(); i++) {
//Verifies user login name and password
if (players.get(i).getLoginName().equalsIgnoreCase(userName)&&(players.get(i).checkPassword(userPW)))
{
char continueGame='y';
//Loop for allowing player to continue the game
while(continueGame=='y'||continueGame=='Y') {
//Ensure player have sufficient chips to play the game
if (players.get(i).getScores()>0) {
//Game function which returns the chips of the player after the game
players.get(i).setScores(startGame(players.get(i).getLoginName(), players.get(i).getScores()));
System.out.print("Next Game? (Y/N) > ");
continueGame = input.next().charAt(0);
} else {
continueGame = 'n';
System.out.println("Sorry you do not have enough chips.");
}
}
System.out.println("Thank you for playing, see you again!");
exist = true;
}
}
//If user id or password does not match or incorrect
if (exist == false) {
System.out.println("Error! incorrect username or password!");
}
//Write array into file
try {
PrintWriter fileOut = new PrintWriter("players.dat");
//BufferedWriter fileOut = new BufferedWriter(new FileWriter("players.dat", false));
for (int i = 0; i < players.size(); i++) {
fileOut.println(players.get(i).getLoginName() + "|" + players.get(i).getHashPass() + "|" + players.get(i).getDate() + "|"
+ players.get(i).getScores());
//fileOut.printLn();
}
fileOut.close();
//System.out.println("Data saved");
} catch (IOException e) {
System.out.println("Failed to open file");
}
}
Player 是另一个 java 文件/类。 startGame() 是 GameModule 中的一个方法。
正如您所看到的代码,它首先检查 player.dat 是否存在。然后进入登录部分。在登录过程中,它会检查用户名和/或密码是否在文件中。
这是输出:
FISHING PAIR GAME LOGIN
--------------------------------------------------
Enter Login name> IcePeak
Enter Password> p1
Error! incorrect username or password!
在 player.dat 文件中--
冰峰|p1|-|10
蓝骑士|p2|-|10
黑色游侠|p3|-|10
淘金者|p4|-|10
“-”表示登录日期。由于球员是新人,所以没有日期。
好吧,您可以看到 IcePeak 和密码 p1 已经存储在该文件中,但我收到了该错误消息。我已经逐行重新阅读了所有代码,甚至重新输入了代码。我忘记了我尝试过的另一件事。我什至删除了该文件并使用相同的信息重新创建它。但我仍然收到相同的错误消息。我只是不知道也不明白出了什么问题:(
所以请帮帮我,谢谢:)
编辑 - 添加 Player.java
/**
* CSCI213 Assignment 1
* ------------------
* File name: Player.java
* Author: Kanak Priya Selvarani
* UOW Student number: 4641619
* Description: Player class. This class contains player's details which will be saved in players.dat file.
*/
//package assignment1_kanakpriyaselvarani;
package admin;
import admin.User;
import java.util.ArrayList;
//import User.java;
/**
*
* @author SONY
*/
public class Player extends User{
private int scores;
private String date;
//private String loginName, hashedPassword;
ArrayList<Card>cardsOnHand;
public Player(String loginName, String hashPass, String date, int scores)
{
super(loginName,hashPass);
//this.loginName = loginName;
//this.hashedPassword = hashedPassword;
this.scores = scores;
this.date = date;
cardsOnHand = new ArrayList<>();
}
public String getDate()
{
return date;
}
public int getScores()
{
return scores;
}
public void addScores(int scores)
{
this.scores+=scores;
}
public void deductScores(int scores)
{
this.scores-=scores;
}
public void setScores(int scores)
{
this.scores=scores;
}
public int getNumOfCards()
{
return cardsOnHand.size();
}
public void addCard(Card card)
{
cardsOnHand.add(card);
}
public void showCards()
{
System.out.println(getLoginName());
for(Card c:cardsOnHand)
{
System.out.print(c+ " ");
}
System.out.println("");
}
public void showCardsValue()
{
System.out.println("Value:"+getTotalCardsValue());
}
public int getTotalCardsValue()
{
int totalValue=0;
for(Card c:cardsOnHand)
{
totalValue+=c.getValue();
}
return totalValue;
}
//Thinks of the action that a player can take, implements those action as methods...
public static void main(String []args)
{
//testing of getTotalCardsValue()
Player p = new Player("tester","","",0);
Card c1 = new Card("Heart","Ace",1);
Card c2 = new Card("Heart","Queen",10);
p.addCard(c1);
p.addCard(c2);
p.showCards();
p.showCardsValue();
Card c3 = new Card("Heart","3",3);
p.addCard(c3);
p.showCards();
p.showCardsValue();
}
}
第二次编辑 - User.java
/*
* CSCI213 Assignment 1
* -----------------
* File name: User.java
* Author: Kanak Priya Selvarani
* UOW Student Number: 4641619
* Description: User Class. This is for login name and password of admin and player.
*
*/
//package assignment1_kanakpriyaselvarani;
//import Utility.java;
package admin;
abstract public class User {
private String loginName;
private String hashPass;
private String date;
private int scores;
public User(String loginName,String hashPass)
{
this.loginName = loginName;
this.hashPass = hashPass;
}
public String getLoginName()
{
return loginName;
}
public String getHashPass()
{
return hashPass;
}
public void setHashPass(String newHashPass)
{
this.hashPass = newHashPass;
}
public boolean checkPassword(String password)
{
boolean status = false;
String hash = Utility.getHashPass(password);
if(hashPass.equals(hash))
{
status = true;
}
return status;
}
}
【问题讨论】:
-
尝试将
players.get(i).getLoginName()放入 System.out.println() 中,然后检查它打印的值是什么,我怀疑players是否为空或loginName或password在播放器中设置不正确。 -
学习使用调试器,逐行执行程序,并检查变量中的值。这将比写这个问题花费更少的时间,并且会为你节省很多天。
-
@hello 显示你的 Player 类
-
@RobertoDeLaParra 我在 Player.java 中添加了
-
@MitulSanghani 我会试试的
标签: java bufferedreader printwriter