-1

Driver と呼ばれるクラスと BankAccount と呼ばれるクラスの 2 つのクラスがあります。Driver には Driver というメソッドがあり、BankAccount には Deposit というメソッドがあります。Driver メソッドから BankAccount.Deposit を呼び出そうとすると、「非静的メソッド Deposit() は静的コンテキストから参照できません」というエラーが表示されます。

これらのコード行を実行するために何をすべきかについてのアドバイス。

 import javax.swing.JOptionPane;
public class Driver
{
    int choice;
    String number;
    //public Driver()
    public Driver()
    {
         String number = JOptionPane.showInputDialog("1. Deposit 2. Withdraw 3. Balance 4. Change name 5. Exit");
         int choice = Integer.parseInt(number);
         do
         {
         if( choice == 1)
         {
             BankAccount.Deposit() = new Deposit();
             Driver.Driver = new Driver();
            }else if(choice == 2)
          {
              BankAccount.Withdrawl = new Withdrawl();
              Driver.Driver = new Driver();
            }else if(choice == 3)
            {
               BankAccount.getBalance = new getBalance();
               JOptionPane.showDialog(balance);
               Driver.Driver = new Driver();
            }else if(choice == 4)
            {
                name = JOptionPane.showInputDialog(" Please enter a name");
                Driver.Driver = new Driver();
            }else if(choice ==5)
            {
                JOptionPane.showDialog("Goodbye" + name);
            }
        }while( choice >= 1 && choice <= 5);
}
}

これがBankAccountメソッドです

 import javax.swing.JOptionPane;
public class BankAccount
{
double balance = 400;
double deposit;
double withdraw;
double Interest = 1.05;
String name;
String accountNumber;

public BankAccount()
{
name = null;
accountNumber = null;
balance = 0;
}

public double Deposit()
{
    String input = JOptionPane.showInputDialog("How much would you like to deposit?");
    deposit = Integer.parseInt(input);
    if (deposit < 10000)
    {
        balance = (deposit + balance);

    }
    return balance;
}

}
4

3 に答える 3

1

なぜこのようなコードを書いたのか理解できません。

depositJava のメソッド名は、 and notのように小文字で始める必要がありDepositます。

BankAccountクラスでDepositあり、その中の非静的メソッドです。

したがって、Depositメソッドを使用するには、まず次のBankAccountようにクラスのオブジェクト/インスタンスを作成する必要があります:

BankAccount b =new BankAccount();

そして、そのオブジェクト参照を使用する任意のメソッドを使用します:

b.Deposit();
b.Withdraw();

次のように記述します。

if( choice == 1)
{
     BankAccount b = new BankAccount();
     b.Deposit();
}

引き出しやその他のために行う必要があるのと同じ

else if(choice == 2)
{
     BankAccount b = new BankAccount();
     b.Withdrawl();
     Driver.Driver = new Driver();
}
于 2012-12-20T04:46:25.147 に答える
0

あなたの「意図」の作業バージョン:

import javax.swing.JOptionPane;
public class Driver
{
    int choice;
    String number;
    BankAccount myAccount=null;

    public Driver()
    {
    myAccount=new BankAccount();
    }

    public void drive()
    {
    String number = "";
        int choice = 0;
        String name = "?";
         do
         {
             number = JOptionPane.showInputDialog("1. Deposit 2. Withdraw 3. Balance 4. Change name 5. Exit");
             choice = Integer.parseInt(number);
         if( choice == 1)
         {
             myAccount.Deposit();
            }else if(choice == 2)
          {
          // mAccount.Withdrawl();
          // missing method Withdraw1()
            }else if(choice == 3)
            {
        // BankAccount.getBalance = new getBalance();
        // missing method getBalance()
        // JOptionPane.showDialog(balance);
            }else if(choice == 4)
            {
                JOptionPane.showInputDialog(" Please enter a name");
        // todo i guess name should be used somewhere in bankaccount... like myAccount.setName(name)
            }else if(choice ==5)
            {
                // JOptionPane.showDialog("Goodbye" + name);
        // no showDialog method in JOptionPane
        return;
            }
        }while( choice >= 1 && choice <= 5);
    }

    public static void main(String pArgs[])
    {
    Driver driver=new Driver();
    driver.drive();
    }
}
于 2012-12-20T05:11:34.030 に答える
0

この文:

BankAccount.Deposit() = new Deposit();

意味がありません。まず、Deposit()インスタンスメソッドですBankAccount。の特定のインスタンスに対してのみ呼び出すのが理にかなっていますBankAccount。それがコンパイラが不平を言っていることです。

Deposit()さらに、値を返すという問題がありintます。これは、代入ステートメントの左側に表示されるものではありません。また、 という名前のクラスについて言及していDepositないため、どうあるべきかわかりませんnew Deposit()

コードのさらに先にも同様の問題があるようです。たとえば、次のステートメント:

Driver.Driver = new Driver();

まったくナンセンスです。フィールドはありませんDriver.Driver

チュートリアルのインスタンスとクラス メンバーについてを読むことをお勧めします。

于 2012-12-20T04:47:04.700 に答える