1

私はプログラミングとウェブデザインを専攻した最初の年で、これらすべてに非常に慣れていません。私は自分のコースをオンラインで受講していますが、私の教授は時折手に入れるのが難しいです.

とにかく、銀行情報(口座番号、口座残高、口座タイプ[貯蓄または小切手])を取得し、利息とサービス料を計算し、口座番号と口座残高を出力するプログラムからこのコードを作成しました。

私の主な問題は、変数「servCharge」が初期化されていない可能性があるという構文エラーです。私はこれを何度も見てきましたが、私が間違ったことを追跡することはできません.

このようなものは、ほとんどの人にとって簡単に見つけられると確信しています。これに関するヘルプと、コードをクリーンアップする方法に関する全体的な提案は、役に立ち、非常に高く評価されます!

これが私がこれまでに持っているものです:

import java.util.*;

public class Unit5
{
    static Scanner console = new Scanner(System.in);

    public static void main(String[] args)
    {

      final double CHECKING_MIN_BAL = 25.00;
      final double CHECKING_SFEE = 25.00;
      final double MAX_CHECKING_INTR = .015;
      final double MIN_CHECKING_INTR = .03;
      final double SAVINGS_MIN_BAL = 500.00;
      final double SAVINGS_SFEE = 10.00;
      final double SAVINGS_INTR = .04;
      final double FIVE_THOU = 5000.00;

      String accountNumber;
      String accountBal;
      String accountType;
      double accountBalDbl;
      double interest;
      double servCharge;
      double accountBalFinal;

      System.out.println("Bank");
      System.out.println("Please enter a 10 digit "
                           +"account number or enter # to exit: ");
      while (! ( accountNumber = console.next() ).equalsIgnoreCase( "#" ) ) 
      {
        if (accountNumber.matches("^[0-9]{10}"))
        {
          System.out.println();
        }else{
          System.out.println("Invalid account number!");
          System.exit(0); 
        }

        System.out.println("Please enter account balance: ");
        accountBal = console.next();
        {
          if (accountBal.matches("^\\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\\.[0-9][0-9])?$"))  //adjust so it takes more numbers before decimal
          {
             System.out.println();
          }else{
             System.out.println("Invalid dollar amount!");
             System.exit(0);
          }

          System.out.println("Please enter account type,"
                        +"C for checking or S for savings");
          accountType = console.next();
          {
          if (accountType.matches("^[Ss | Cc]"))  //look into this
          {
             System.out.println();
          }else{
             System.out.println("Invalid account type, please enter"
                          +"C or S");
             System.exit(0);
          }

          accountBalDbl = Double.parseDouble(accountBal);
          {
             if (accountType == ("[Cc]"))
             {     
                if (accountBalDbl < CHECKING_MIN_BAL)
                   servCharge = CHECKING_SFEE;
                else
                   servCharge = 0.0;

             if (accountBalDbl < CHECKING_MIN_BAL + FIVE_THOU)
                interest = accountBalDbl * MIN_CHECKING_INTR;
             }
          }
          {
           if (accountType == ("S | s"))
             {
             if (accountBalDbl < SAVINGS_MIN_BAL)
                servCharge = SAVINGS_SFEE;
                interest = 0.0;
             }else{ 
                servCharge = 0.0;
                interest = accountBalDbl * SAVINGS_INTR;
             }
          }
          accountBalFinal = (accountBalDbl - servCharge) + interest;
          System.out.println("Account Number: " + accountNumber);
          System.out.println();
          System.out.println("Current Balance: " + accountBalFinal);
          System.out.println();
          System.out.println("Please enter a 10 digit "
                     +"account number or enter # to exit: ");

         }
        }
      }
    }
  }
4

2 に答える 2

1

あなたのフォーマットは解読するのが少し難しいですが、あなたが言及しているエラーは、servCharge に値を割り当てていないコードに少なくとも 1 つの分岐があるという事実に関係しています。あなたがこれをやろうとするとき、それは問題です:

accountBalFinal = (accountBalDbl - servCharge) + interest;

すべてのブランチで servCharge が常に何かに設定されていることを確認するか、コードの最初でデフォルト値に設定されていることを確認してください。何かのようなもの:

servCharge = 0.0;

これに関する大きな問題は、予期していなかった servCharge の値 (0.0) になる可能性があることです。すべての if/else ブランチを確認し、各ブランチで servCharge に適切な値を割り当てていることを確認してください。

于 2013-03-19T03:46:52.950 に答える
1

エラー自体は、この問題を解決する方法を示唆しています。変数をデフォルト値に初期化する必要があります。これは、Java ではローカル変数 (メソッド内で宣言された変数) が暗黙的に初期化されないためです。したがって、コンパイラは、変数を使用する前に変数を初期化するというエラー メッセージを表示します。

メソッド本体内で(初期化せずに)宣言するだけで、それを使用しないと、エラーメッセージは表示されません。コンパイラは、初期化されていないローカル変数に値を代入したり、その内容を出力したりするなどの方法で使用しようとした場合にのみ問題になります。

これらのことを把握するには、Java の基本を読むことをお勧めします。お役に立てれば。

于 2013-03-19T05:49:05.793 に答える