2016-04-29 5 views
0

は、ええと..私は内部のデータを持つしかし私ができる..よく..私はしました。このテキスト/ DATファイルを説明するためにベストを尽くします。コードを実行すると、このエラーメッセージ "Error!Incorrect username or password!"が表示されます。ユーザー名とパスワードはすでにファイルに入っていますが以下は、コード、出力、およびファイルです。Javaは - テキストファイルからデータをキャプチャしてトラブルを抱えて

ここ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のメソッドです。

players.datが存在しないかどうかをコードthat..it最初のチェックを見ることができるように。その後、ログイン部分に行きます。ログイン中にユーザー名やパスワードがファイルに含まれているかどうかを確認します。

これが出力されます:players.dat file--

IcePeakで

FISHING PAIR GAME LOGIN 
-------------------------------------------------- 
Enter Login name> IcePeak 
Enter Password> p1 

Error! incorrect username or password! 

| P1 | - | 10

BlueKnight | P2 | - | 10

BlackRanger | p3 | - | 10

GoldDigger | p4 | - | 10

ザ・「 - 」のログイン日時を示すためです。プレイヤーは新しいので、日付はありません。

だけでなく、あなたはそのIcePeakとパスワードp1はすでにそのファイルに保存されているが、私はそのエラーメッセージが表示されました見ることができます。私はすべてのコードを1行ずつ読み直しました。私は再入力しました。私はもう一度試したことを忘れてしまった。私はそうであっても私を助けてください、私はまだちょうど知らないと何が悪かったのか理解していないと同じエラーmessage.Iを取得しています同じinfo.But :(

でそれをファイルを削除して再作成しますアウト、感謝:)

はEDIT -

/** 
* 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(); 


    } 
} 

Player.javaを追加SECOND EDIT - 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; 
    } 

} 
+0

は' players.get(I).getLoginNameを入れてみてください^^そして、それは印刷した値であるかどうか確認する私を助けて私は 'players'が空であるとは思っていないし、' loginName'や 'password'がプレイヤーで正しく設定されていない。 –

+5

デバッガの使い方を学び、行ごとにプログラムを実行し、変数の値を調べます。それはこの質問を書くよりも時間がかかり、日と日を節約できます。 –

+0

@hello Playerクラスを表示 – raven

答えて

-1

私の疑惑は、あなたの入力が非表示の文字が含まれていてもよいということです。あなたがString.equalsIgnoreCase()を使用していれば、入力に "スペースまたはコントロール"文字が含まれていれば、Javaはそれを完全には一致させません。まずtrim()を試してください。ダブルチェックをするだけで、ユーザ名とパスワードの両方を引用符で囲んでコンソールに表示することができます。

私はこれが答えていない知っているが、私は私が私のplayers.datファイル内の問題

何考え出したコメント:(

0

を追加するのに十分な評判を持っていない、それがハッシュ化されなければなりませんパスワード通常のパスワードの代わりにパスワード

私のファイルはリンクされているので(ポリモーフィズム)、すべてのファイルがplayers.datファイルを共有します。さらに、ファイルにはハッシュパスワードのコードがあります。

おかげで、ところで `ちょうどあなたの内側のSystem.out.println()内のループのために)(

関連する問題