-3

我正在尝试使用以下 API 在 while 循环中调用动画:

public void animate( String currentTransaction, double currentAmount, double currentBalance )

我正在尝试使用以下方式拨打电话:

animate(  currentTransaction, currentAmount, currentBalance );

但是,我不断收到错误消息。我究竟做错了什么?

错误是:

currentTransaction cannot be resolved to a variable and
currentBalance cannot be resolved to a variable

下面发布的是我的代码:

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( ) {
    double balance;
    double currentAmount;
    String nextLine;
    StringTokenizer st;
    String transactionName;
    Scanner scan = null;
    try {
         scan = new Scanner (new FileReader("transactions.txt"));
    } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
    }
    Scanner callParse;
    String trans;
    while (scan.hasNextLine()) {
        trans = scan.nextLine();
        scan.useDelimiter(":");
        callParse = new Scanner(trans);
        callParse.useDelimiter(":");
    }
    try {
        scan = new Scanner (new FileReader("checkbook.txt"));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Scanner callParse2;
    String check;
    while (scan.hasNextLine()) {
        check = scan.nextLine();
        scan.useDelimiter(":");
        callParse2 = new Scanner(check);
        callParse2.useDelimiter(":");
    }

    animate(  currentTransaction, currentAmount, currentBalance );
 }

 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( );
}
}
4

3 回答 3

3

该变量currentTransaction不存在于您的函数范围内balanceCheckBook。如果是这种情况,您需要将变量传递给函数balanceCheckBook或在名为 的类中创建成员变量currentTransaction

换句话说,当您在具有变量undefined 的函数animate中调用函数时,编译器将永远不会知道您要传递给函数的值。balanceCheckBookcurrentTransactionanimate

animate(  currentTransaction, currentAmount, currentBalance );

因此,您需要定义currentTransaction并让 Java 知道要传递什么值。

于 2013-06-25T17:38:48.410 回答
0

currentTransaction没有在方法的范围内定义,也不是方法的参数。您需要将变量作为参数传递或使其成为实例变量。声明为的方法:

public void animate( String currentTransaction, double currentAmount, 
                     double currentBalance )

因此,您需要使用 a String,adouble和另一个double:来调用它animate(String, double ,double),而您将其称为 asanimate( currentTransaction, currentAmount, currentBalance );但我看不到您在哪里定义currentTransactionor currentBalance

于 2013-06-25T17:39:30.500 回答
0

对我来说,看起来您应该使用变量balance而不是currentBalanceandtranstransactionName而不是currentTransaction.

于 2013-06-25T18:04:30.653 回答