【问题标题】:If-Else require variable initializationIf-Else 需要变量初始化
【发布时间】:2016-09-04 21:25:55
【问题描述】:

为了使第一个 If-Else 语句起作用,我必须用“= 0”初始化“quantity”和“productNo”变量。这没有在作业中指定。是否有另一种方法可以在不初始化变量的情况下使 If-Else 工作?

如果需要,第一个 If 语句允许用户在程序的第一个提示符处输入标记“-1”以退出(这是提示文本的一部分)。程序末尾的第二条 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

【问题讨论】:

  • if的第一部分设置quantity = 0。否则它可能永远不会被初始化。
  • 您也可以在main 方法之外将它们定义为staticstatic private double orderAmount; private static int quantity;
  • @shmosel If 语句中的“quantity = 0”应该在哪里?当我把它放在那里时,它会将 productNo 的第一个提示设置为“-1”。

标签: java if-statement


【解决方案1】:

您需要确保输入标记值后,您的代码会立即退出。否则代码将有一个路径,其中变量 productNo 或数量用于计算而不被初始化。

将变量设置为一些初始值是一种有效的方法;在使用未初始化的值之前退出是另一种选择。

【讨论】:

    【解决方案2】:

    根据 Java 规范,局部变量(在函数内定义的变量)不会自行初始化,开发人员需要对其进行初始化。

    【讨论】:

    • 所以我想我的做法是正确的。所有其他方式要么导致错误,要么导致用户被提示输入数量。
    • 是的,Java 建议初始化一个局部变量,因为 main 本身就是一个函数,所有变量的规则在这里仍然适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2020-05-16
    • 2014-03-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多