2016-09-04 7 views
0

最初のIf-Elseステートメントを機能させるために、 "quantity"と "productNo"変数を "= 0"で初期化しなければなりませんでした。これは割り当てに指定されていませんでした。変数を初期化せずにIf-Elseの作業を行う別の方法はありますか?If-Elseは変数の初期化が必要です

最初のIfステートメントでは、プログラムの最初のプロンプトにセンチネル "-1"を入力することができます(プロンプトテキストの一部です)。プログラム終了時の2番目のIf-Elseステートメントでは、ユーザーは任意のポイントでセンチネル値を使用して終了することができます。

これは、購入した製品および数量の選択の合計注文小売額 を計算するJavaアプリケーションです。単位あたり5つの固定費を伴う5つの製品があります。ユーザーは製品番号を入力し、次に数量を入力します。出力は、製品番号、数量、ラインコスト、注文合計です。これは、 "-1"のセンチネル値を有し、ユーザがプログラムを終了できるようにする。

import java.util.Scanner; 
public class Program3 
{ 
public static void main(String[] args) 
{ 

    final double COST_PROD1 = 2.98, COST_PROD2 = 4.50, 
    COST_PROD3 = 9.98, COST_PROD4 = 4.49, COST_PROD5 = 6.87; 
    int productNo = 0; 
    int quantity = 0; 
    double lineAmount = 0;  
    double orderAmount = 0; 

    Scanner inputDevice = new Scanner(System.in); 


    System.out.print("Enter Product No. (1-5) or -1 to Quit: >> "); 
    productNo = inputDevice.nextInt(); 


    if (productNo == -1) 
     { 
    System.out.println("You have entered -1. You have exited the program."); 
    System.out.println("Order grand total = $0.00");  
     } 

    else 
    { 
     System.out.print("Please enter unit quantity >> "); 
     quantity = inputDevice.nextInt(); 
     } 

    while(productNo != -1) 
     {  
    switch(productNo) 
     { 
    case 1: 
    lineAmount = quantity * COST_PROD1; 
    orderAmount += lineAmount; 
     System.out.println("Product -- " + "Quantity -- " + "Line Cost -- " 
     + "Total Order"); 
     System.out.println(" " + productNo + "   " + quantity + 
     "   " + lineAmount + "   " + orderAmount); 
     break; 

     case 2: 
     lineAmount = quantity * COST_PROD2; 
     orderAmount += lineAmount; 
     System.out.println("Product -- " + "Quantity -- " + "Line Cost -- " 
      + "Total Order"); 
     System.out.println(" " + productNo + "   " + quantity + 
      "   " + lineAmount + "   " + orderAmount); 
      break; 

     case 3: 
     lineAmount = quantity * COST_PROD3; 
     orderAmount += lineAmount; 
     System.out.println("Product -- " + "Quantity -- " + "Line Cost -- " 
      + "Total Order"); 
     System.out.println(" " + productNo + "   " + quantity + 
      "   " + lineAmount + "   " + orderAmount); 
     break; 

     case 4: 
     lineAmount = quantity * COST_PROD4; 
     orderAmount += lineAmount; 
      System.out.println("Product -- " + "Quantity -- " + "Line Cost -- " 
      + "Total Order"); 
      System.out.println(" " + productNo + "   " + quantity + 
      "   " + lineAmount + "   " + orderAmount); 
      break; 

      case 5: 
      lineAmount = quantity * COST_PROD5; 
      orderAmount += lineAmount; 
      System.out.println("Product -- " + "Quantity -- " + "Line Cost -- " 
      + "Total Order"); 
      System.out.println(" " + productNo + "   " + quantity + 
      "   " + lineAmount + "   " + orderAmount); ; 
      break; 

      default: 
      System.out.println("You have entered an invalid product number. 
      Try again."); 
      break; 
     }//end switch 

     System.out.print("Enter Product No. (1-5) or -1 to Quit: >> "); 
     productNo = inputDevice.nextInt(); 
      if (productNo == -1) 
     { 
     System.out.println("You have entered -1. You have exited the 
       program."); 
     System.out.println("Order grand total..." + orderAmount); 
     } 
     else 
     { 
     System.out.print("Please enter unit quantity >> "); 
     quantity = inputDevice.nextInt(); 
      } 
    } // end while  
    } // end main 
    } // end class 
+0

'if'の最初の部分に' quantity = 0'を設定します。そうしないと、決して初期化されないことがあります。 – shmosel

+0

'main'メソッドの外側で' static'として定義することもできます: 'static private double orderAmount;プライベート静的int量; '。 – DimaSan

+0

@shmosel Ifステートメントでは、「数量= 0」を指定する必要がありますか?そこに配置すると、productNoの最初のプロンプトが「-1」に設定されます。 – HerdingDogRescuer

答えて

0

センチネル値が入力されると、すぐにコードが終了するようにする必要があります。それ以外の場合、コードは、変数productNoまたはquantityが初期化されずに計算に使用されるパスを持ちます。

変数をいくつかの初期値に設定することは有効なアプローチの1つです。初期化されていない値が使用される前に終了することも別の方法です。

0

Java仕様では、ローカル変数(関数内で定義された変数)は初期化されず、開発者はそれを初期化する必要があります。

+0

だから私は正しい方法でやっていると思う。他のすべての方法でエラーが発生するか、量を入力するようユーザーに求められます。 – HerdingDogRescuer

+0

はい、Javaはローカル変数を初期化することをお勧めします。メイン自体は、変数のすべてのルールがここでも適用される関数です。 – Shafique

関連する問題