java - 使用输入文件创建一个对象并将该对象添加到一个数组中,并让它打印出该数组的信息

标签 java oop

这是我的代码,它接受一个文本文件并创建一个帐户对象,我遇到的问题是打印出银行帐户数组中的帐户对象

  public static void main (String[] args)
   {
      try {

          // Read data from a file into a Bank.
          // Each line of the file has info for one account.  
          BankInterface myBank = readFromFile("BankAccounts.txt");

          // Print all the data stored in the bank.
          System.out.println (myBank);

      } // end try  
      catch (IOException ioe) {
         System.out.println("IOException in main: " + ioe.getMessage()); 
         ioe.printStackTrace();
      } // end catch
      catch (Exception e) {
         System.out.println("Exception in main: " + e.getMessage());
         e.printStackTrace();
      } // end catch
   } // end main


   /**
    * readFromFile:    **** INSERT COMMENTS ****
    * 
    */
   public static BankInterface readFromFile (String fileName) throws IOException
   {
       // Creata a bank.
       BankInterface myBank = new Bank("Bank");

         // Open a file for reading.
         Scanner inputSource = new Scanner (new File(fileName));

         // while there are more tokens to read from the input source...
     while (inputSource.hasNext()) {

        // Read one line of input from the file into an Account object
            Account acct = InputManager.readOneAccountFrom (inputSource);
        // Store the account info in the bank.
        //**** INSERT CODE TO ADD acct TO THE BANK ****
        myBank.addAccount(acct);

     } // end while


         return myBank;

    } // end readFromFile

当我运行主程序时,我没有打印出帐户,我只是得到:

Reading: name,id,balance
Exception in main: null

有人可以解释为什么会发生这种情况以及如何解决它吗? 堆栈跟踪:

java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at InputManager.readOneAccountFrom(InputManager.java:30)
    at ATM.readFromFile(ATM.java:48)
    at ATM.main(ATM.java:15)
    at __SHELL3.run(__SHELL3.java:6)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:730)

这是 readOneAccountFrom 方法:

public static Account readOneAccountFrom (Scanner inputSource)
{
    // Read one line of account data into oneLine
    System.out.println ("Reading: name,id,balance");
    String oneLine = inputSource.nextLine();

    // Parse line of account data, separated by commas.
    Scanner lineTokenizer = new Scanner (oneLine);
    lineTokenizer.useDelimiter (",");

    // Get account data (i.e. name, accountNum and balance) from oneLine
    String name = lineTokenizer.next ();
    String accountNum = lineTokenizer.next ();
    Money balance = new Money(lineTokenizer.nextLong());

    // Create and return an Account object with the data read for one   account.
    Account oneAccount = new Account (name, accountNum, balance);
    System.out.println ("Account read: " + oneAccount);

    return oneAccount;
} // end readOneAccountFrom

最佳答案

即使你的评论说

//将文件中的一行输入读入 Account 对象

您没有正确读取行。

您应该使用 hasNextLine() 和 nextLine() 从扫描仪读取一行。如下所示:

while (inputSource.hasNextLine()) {
      String line = inputSource.nextLine();

关于java - 使用输入文件创建一个对象并将该对象添加到一个数组中,并让它打印出该数组的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37197612/

相关文章:

c++ - 返回私有(private) vector

php - 我想在 PHP OOP 中的另一个方法中使用一个方法

java - 使用 findVirtual 调用的 Methodhandle 私有(private)方法

java - 如何仍然使用 Future.get 管理并行化?

java - 动态删除所有按钮

oop - 告诉,不要问和单一职责——在类里面用数据做新的事情

java - 如何在 Java 中实现常量

java - 不使用 HashSet 删除 ArrayList 中的重复元素

PHP 注册表模式

python - 在 python 中,使用点表示法访问类属性的正确命名法是什么?