我正在尝试从文件transactions.txt中读取,以下是transactions.txt中的内容:
Check # 13 : -200.00
Check # 14 : -100.00
Withdrawal June 12 : -200.00
Withdrawal June 17 : -400.00
Withdrawal June 23 : -100.00
Deposit : 4000.00
Deposit : 100.00
Something else : -1000.00
Check # 16 : -500.00
Check # 15 : -100.00
以下是我的代码:
import javax.swing.JOptionPane;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import java.awt.Graphics;
import java.util.StringTokenizer;
import java.util.Scanner;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileNotFoundException;
public class Accounting extends JFrame
{
private BankAccount bankAccount;
public Accounting( )
{
bankAccount = new BankAccount( getBackground( ) );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize( 300, 300 );
setVisible( true );
}
public void balanceCheckBook( )
{
// ***** Write the body of this method *****
//
// Using a while loop, read the file transactions.txt
// The file transactions.txt contains
// transactions between you and your bank
//
// You will need to call the animate method inside
// the body of the loop that reads the file contents
//
// The animate method takes three arguments:
// a String, representing the type of transaction
// a double, representing the transaction money amount
// a double, representing the new checkbook balance
// So if these three variables are:
// transactionName, currentAmount, and balance,
// then the call to animate will be:
//
// animate( transactionName, currentAmount, balance );
//
// You should make that call in the body of your while
// loop, after you have updated the checkbook balance
//
double balance = 0.00;
double currentAmount;
String nextLine;
StringTokenizer st;
String transactionName;
Scanner scan = null;
scan = new Scanner (new FileReader("transactions.txt"));
Scanner callParse;
String trans;
while ((trans = scan.nextLine()) != null )
{
scan.useDelimiter(":");
callParse = new Scanner(trans);
callParse.useDelimiter(":");
}
}
public void animate( String currentTransaction, double currentAmount, double currentBalance )
{
// set the current transaction in the bankAccount object
if ( currentTransaction.startsWith( "Ch" ) )
bankAccount.setCurrentTransaction( new Check(currentAmount ) );
else if ( currentTransaction.startsWith( "With" ) )
bankAccount.setCurrentTransaction( new Withdrawal(currentAmount ) );
else if ( currentTransaction.startsWith( "Dep" ) )
bankAccount.setCurrentTransaction( new Deposit(currentAmount ) );
else
bankAccount.setCurrentTransaction( new UnknownTransaction(currentAmount ) );
// set the currentBalance data member in the bankAccount object
bankAccount.updateBalance( currentBalance );
repaint( );
try
{
Thread.sleep( 3000 ); // wait for the animation to finish
}
catch ( Exception e )
{
}
}
public void paint( Graphics g )
{
super.paint( g );
bankAccount.draw( g );
}
public static void main( String [] args )
{
Accounting app = new Accounting( );
app.balanceCheckBook( );
}
}
我收到错误:
scan = new Scanner (new FileReader("transactions.txt"));
另外,当我运行代码时,它告诉我:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at Accounting.balanceCheckBook(Accounting.java:73)
at Accounting.main(Accounting.java:119)
我该怎么做才能解决这些错误?
答案 0 :(得分:2)
您需要使用Scaner.hasNextLine
检查扫描仪是否有下一行。
顺便说一下,Java文档在解释抛出特定异常的原因方面通常太棒了。对于Scanner.nextLine
,文档报告:
抛出:
NoSuchElementException
- 如果没有找到行
始终查看Java文档!
答案 1 :(得分:0)
将其更改为:
while (scan.hasNextLine())
{
trans = scan.nextLine();
scan.useDelimiter(":");
callParse = new Scanner(trans);
callParse.useDelimiter(":");
}
然后它应该正常工作