【问题标题】:using void method properly正确使用 void 方法
【发布时间】:2021-06-19 17:30:02
【问题描述】:
import java.text.DecimalFormat;
import java.util.Scanner;

public class shippingCharges {

  public static void main(String[] args) {

    double inputWeight, inputDistance;

    Scanner sc = new Scanner(System.in);

    System.out.println("Enter the weight of the package in Kilograms between 0 - 50 exclusive: ");
    inputWeight = sc.nextDouble();
    while (inputWeight < 0.0 || inputWeight > 50.0) {
      System.out.println("Weight must be between 0 - 50 exclusive. Enter the weight: ");
      inputWeight = sc.nextDouble();
    }

    System.out.println("Enter the distance the package is to be shipped between 10 - 3000 inclusive: ");
    inputDistance = sc.nextDouble();
    while (inputDistance < 0 || inputDistance > 3000) {
      System.out.println("Distance must be between 0 - 3000 exclusive. Enter the distance: ");
      inputDistance = sc.nextDouble();

      // Calling ShippingCost Method
      shippingCost(inputWeight, inputDistance);
    }
  }

  public static void shippingCost(double inputWeight, double inputDistance) {

    // Declaring initial variables needed

    double inputRate, blocks, total;

    // Declaring named constants needed

    final double RATE1 = 1.20, RATE2 = 2.20, RATE3 = 3.80, RATE4 = 4.80;
    final double W1 = 2, W2 = 6, W3 = 10, W4 = 50;
    final int DIS = 200;

    Scanner sc = new Scanner(System.in);
    DecimalFormat df = new DecimalFormat("0.00");
    inputWeight = sc.nextDouble();
    inputRate = sc.nextDouble();
    inputDistance = sc.nextInt();

    // Using an if-else statement to determine the rate of per 200 miles shipped

    if (inputWeight <= W1)
      inputRate = RATE1;
    else if (inputWeight > W1 && W1 <= W2)
      inputRate = RATE2;
    else if (inputWeight > W2 && W2 <= W3)
      inputRate = RATE3;
    else if (inputWeight > W3 && W3 <= W4)
      inputRate = RATE4;

    // Calculating the number of 200 mile blocks using the built-in ceil() method and total

    blocks = Math.ceil(inputDistance / DIS);
    total = blocks * inputRate;

    // Printing the Invoice Summary

    System.out.println("\tThe shipping rate is: " + df.format(inputRate) + " per 200-mile shipped. ");
    System.out.println("\tThere are " + blocks + " 200-mile blocks in " + inputDistance + "miles. ");
    System.out.println("\tTotal = " + blocks + " x " + inputRate + " = " + total);
  }
}

我最近在我的一门编程课上遇到了问题。这个问题看起来很简单,但我才刚刚开始。基本上,我试图将我正确创建的 void 方法调用到我的主方法程序中。但是,每次我运行程序时,它都会显示System.out.println(),但是在我到达运输方式后会终止程序。任何帮助都将意义重大,谢谢。

【问题讨论】:

  • 您对shippingCost 的调用是in while (inputDistance &lt; 0 || inputDistance &gt; 3000) {(不应该是)。
  • 你先生是山羊

标签: java methods void


【解决方案1】:

如果将呼叫转移到 shippingCost 外部,如果条件如下,则更改 while 会有所帮助

public static void main() {
        System.out.println("Enter the weight of the package in Kilograms between 0 - 50 exclusive: ");
        
        Scanner sc = new Scanner(System.in);
        double inputWeight = sc.nextDouble();
        if (inputWeight < 0.0 || inputWeight > 50.0) {
            System.out.println("Weight must be between 0 - 50 exclusive. Enter the weight: ");
            inputWeight = sc.nextDouble();
        }

        System.out.println("Enter the distance the package is to be shipped between 10 - 3000 inclusive: ");
        double inputDistance = sc.nextDouble();
        if (inputDistance < 0 || inputDistance > 3000) { 
            System.out.println("Distance must be between 0 - 3000 exclusive. Enter the distance: ");
            inputDistance = sc.nextDouble();
        }

            //Calling ShippingCost Method 
            shippingCost(inputWeight, inputDistance);
    }

【讨论】:

    【解决方案2】:

    当您到达 shippingCost 方法时,您再次接受用户输入:

    inputWeight = sc.nextDouble();
    inputRate = sc.nextDouble();
    inputDistance = sc.nextInt();
    

    您不需要这样做,因为您已经将这些值作为方法本身的输入(检查方法签名/参数)。只需从您的 shippingCost 方法中删除上述代码片段,然后您的代码就可以正常工作了。

    此外,由于您没有获得 inputRate 变量的输入,因此只需在声明后的 shippingCost 方法中初始化以下变量:

    inputRate = 0.0;
    

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2017-03-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多