2015-10-12 45 views
-3

ok,所以數據文件很簡單,看起來像這樣:1用戶傳遞名稱bday 1是現在只有一個的行數。當我試圖打印出用戶的日誌時,它打印出這個登錄@ 33acf5f7讀取數據使類對象不工作java

我該如何解決這個問題,以便打印它是日誌[0],以及如何製作此代碼以便我可以最終打印像log [0] .getName這樣的東西,還是我有那部分權利它最終會工作?

public class Project { 

    public Scanner sc; 
    login[] log; 

    public int readData() { 
     sc = new Scanner(System.in); 
     try { 
      sc = new Scanner(new File("src/input.txt")); 
     } catch (Exception e) { 
     } 

     int rows = sc.nextInt(); 
     int data = 4; 
     // Fill in data 
     log = new login[rows]; 
     try { 
      for (int i = 0; i < 1; i++) { 
       for (int j = 0; i < data; j++) { 

        String user = sc.next(); 
        String password = sc.next(); 
        String name = sc.next(); 
        String bday = sc.next(); 
        log[j] = new login(rows, user, password, name, bday); 
        System.out.println(log[i].getName()); 
       } 
      } 
     } catch (Exception e) { 
      System.out.println("ERROR HERE"); 
     } 

     return 0; 

    } 

    public static void main(String[] args) { 
     Project proj = new Project(); 
     proj.readData(); 

    } 

} 

class login { 

    private char[] user, pass, name, bday; 
    private String getName; 

    public login(int i, String user, String pass, String name, String bday) { 
     this.user = user.toCharArray(); 
     this.pass = pass.toCharArray(); 
     this.name = name.toCharArray(); 
     this.bday = bday.toCharArray(); 
    } 

    public char[] getName() { 
     return this.name; 
    } 
} 
+0

你的'src/input.txt'裏面有什麼向我們展示了它的至少一部分! –

+0

也看看這個線程上如何閱讀與掃描儀文件:http://stackoverflow.com/questions/13185727/reading-a-txt-file-using-scanner如果它不會幫助添加評論 –

+0

的閱讀在作品中...我試圖確定,所以數據文件很簡單,看起來像這樣:1用戶傳遞名稱bday 1是現在只有一個的行數。當我試圖打印出用戶的日誌時,用這段代碼打印出這個登錄@ 33acf5f7 如何解決這個問題,以便打印出它是log [0],以及如何製作這段代碼,以便最終結束打印日誌[0] .getName之類的東西還是我有那部分權利itll最終工作?輸入文件如下所示:1用戶傳遞名稱bday –

回答

0

你的login類很奇怪。爲什麼您使用char[]而不是String?這非常類似C。你的System.out.println()導致奇怪的輸出的原因是因爲它正在打印數組的內存位置,而不是您試圖表示的字符串。

改爲使用String

class login { 

    private String user, pass, name, bday; 

    public login(int i, String user, String pass, String name, String bday) { 
     this.user = user; 
     this.pass = pass; 
     this.name = name; 
     this.bday = bday; 
    } 

    public String getName() { 
     return this.name; 
    } 
} 

此外,關於您的線路:

private String getName;

我不知道,如果你試圖前瞻性聲明的方式像在C,但你並不需要這麼做Java,所以我刪除了該行。

0

您的代碼有幾個問題。

關於先閱讀Java Code Conventions你有login類應該被命名爲Login

在你有一個String類型的屬性稱爲getName這是沒有必要的,如果你已經有一個名爲name也是一個字符串屬性登錄類getName通常用於吸氣方法(您已經使用)。

還是關於您的login類創建一個構造函數是:

public login(int i, String user, String pass, String name, String bday) 

無需爲int i屬性,因爲沒有什麼可使用它在你的類。如果您打算稍後添加一些內容,請確定。

你登錄類應該是:

public class Login { 
    private String user, pass, name, bday; 

    public Login(String user, String pass, String name, String bday) { 
     this.user = user; 
     this.pass = pass; 
     this.name = name; 
     this.bday = bday; 
    } 

    public String getName() { 
     return this.name; 
    } 
} 

現在爲您的代碼的閱讀部分。如果您打算將文件中的行數用作起點,則必須稍微更改一下代碼以獲取所需的所有內容。所以,你的文件看起來像:

1 user pass name bday 

然後閱讀它使用下面的代碼,改變突出部分的try catch塊:

try { 
    while (sc.hasNextLine()) { 
     for (int i = 0; i < 1; i++) { 
      String user = sc.next(); 
      String password = sc.next(); 
      String name = sc.next(); 
      String bday = sc.next(); 
      log[i] = new Login(rows, user, password, name, bday); 
      System.out.println(log[i].getName()); 
     } 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

我已經先爲for (int i = 0; i < 1; i++) {改變while (sc.hasNextLine()) {Scanner會遍歷文件的每一行。他們從你的文件中讀取數據的方式sc.next();已經在空間之前獲取數據,所以當你試圖讀取for (int j = 0; i < data; j++)中的文件時,如果你有問題的話,如果你已經知道你的文件中有第一個用線條與空間separeted每個數據的數量和線路沒有必要到for

所以爲你的項目類readData方法的代碼應該是:

public void readData() { 
    sc = new Scanner(System.in); 
    try { 
     sc = new Scanner(new File("src/input.txt")); 
    } catch (Exception e) { 
     //As you are starting always use this command on an exception block 
     //it will print what happened with your code, it will be easier to 
     //help you if we know what happened. 
     e.printStackTrace(); 
    } 

    int rows = sc.nextInt(); 
    int data = 4; 
    // Fill in data 
    log = new Login[rows]; 
    /* 
    * Since you know that your file has the number of lines first 
    * you must read this value before the while so The Scanner class 
    * would get it and go on in the same line. 
    * If you want to add another line add it whitout the number of lines 
    * like this: 
    * >2 user pass name bday 
    * >user2 pass2 name2 bday2 
    * Otherwise you will need to change your code a bit. 
    */ 
    try { 
     while (sc.hasNextLine()) { 
      for (int i = 0; i < 1; i++) { 
       String user = sc.next(); 
       String password = sc.next(); 
       String name = sc.next(); 
       String bday = sc.next(); 
       log[i] = new Login(rows, user, password, name, bday); 
       System.out.println(log[i].getName()); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

希望它能幫助。

相關問題