调用方法,参数和参数

问题描述 投票:2回答:2

这可能是一个愚蠢的问题。我的以下代码看起来不错,但是在输出中,它不会期望我的测试方案得到结果。代码如下:

 import java.util.Scanner;
  public class PartyPlannerLab {
                      public static Scanner input = new Scanner(System.in);

    public static int getGuestCount(int guests) {
        while(true) {
            System.out.print("Enter number of guests: ");
            guests = input.nextInt();
            if (guests >= 1 && guests <= 100)
                break;
            else 
                System.out.println("The guest count must be at least 1, but does not exceed 100. Please enter again.");
        }
        return guests;
    }
    public static int getSlicesPerPerson(int slicesPerPerson) {
        while(true) {
        System.out.print("Enter number of slices per person: ");
        slicesPerPerson = input.nextInt();
        if (slicesPerPerson >= 1 && slicesPerPerson <= 8)
            break;
        else
            System.out.println("The pizza slice count must be at least 1, but does not exceed 8. Please try again.");
        }
        return slicesPerPerson;
    }
    public static double computeRoomCost(int guests, double roomCost) {
        if (guests <= 30)
            roomCost = 100.00;
        else
            roomCost = 200.00;
        return roomCost;
    }
    public static double computeSodaCost(double sodaCost, int guests) {
        sodaCost = guests * 1.50;
        return sodaCost;

    }
    public static void printSummary(int guests, double roomCost, double sodaCost, double pizzaCost) {
        System.out.println("Total Guests: " + guests);
        System.out.println("RoomCost: $" + roomCost);
        System.out.println("SodaCost: $" + sodaCost);
        System.out.println("PizzaCost: $" + pizzaCost);
        System.out.println("Total Cost: $" +(roomCost + sodaCost + pizzaCost));
    }
    public static void main(String[] args) {
        int guests = 0;
        int slicesPerPerson = 0;
        double roomCost = 0.0;
        double sodaCost = 0.0;
        double pizzaCost = 0.0;
        getGuestCount(guests);
        getSlicesPerPerson(slicesPerPerson);
        computeRoomCost(guests, roomCost);
        computeSodaCost(sodaCost, guests);
        printSummary(guests, roomCost, sodaCost, pizzaCost);

        input.close();
    }


    }

一个输出如下:

Enter number of guests: 10
Enter number of slices per person: 2
Total Guests: 0
RoomCost: $0.0
SodaCost: $0.0
PizzaCost: $0.0
Total Cost: $0.0
java methods parameters arguments call
2个回答
0
投票

之所以没有得到输出,是因为您在main方法中初始化的值没有被您正在进行的方法调用所更新。

下面的代码可能会解决您面临的问题-

 public static void main(String[] args) {
    int guests = 0;
    int slicesPerPerson = 0;
    double roomCost = 0.0;
    double sodaCost = 0.0;
    double pizzaCost = 0.0;
    guests = getGuestCount(guests);
    slicesPerPerson = getSlicesPerPerson(slicesPerPerson);
    roomCost = computeRoomCost(guests, roomCost);
    sodaCost = computeSodaCost(sodaCost, guests);
    printSummary(guests, roomCost, sodaCost, pizzaCost);

    input.close();
}

[Note-不需要在方法[[getGuestCount&getSlicesPerPerson中传递参数,因为输入是从I / O中获取的


0
投票
您未使用getGuestCountgetSlicesPerPerson等的返回值

这些方法

返回值,这基本上意味着您可以像使用它们一样使用它们。 input.nextInt也返回一个值,这就是为什么您可以将其放在=右侧的原因。

在方法内部,getGuestCount

似乎

更改传入的guests的值,但是此更改实际上不会反映在调用方,因为Java是传递值的。您有点舍弃了传入的值。实际上,如果参数通过引用传递,则您的方法将仅能按原样工作,因此这些方法可以修改传入的

variables

。但这在Java中是不可能的。有关传递值​​和引用传递之间的区别,请参见this post用Java重写方法的正确方法是返回值(它们已经在做,但是您没有使用返回值),并删除无关的参数。

public static int getGuestCount() { int guests; while(true) { System.out.print("Enter number of guests: "); guests = input.nextInt(); if (guests >= 1 && guests <= 100) break; else System.out.println("The guest count must be at least 1, but does not exceed 100. Please enter again."); } return guests; } public static int getSlicesPerPerson() { int slicesPerPerson; while(true) { System.out.print("Enter number of slices per person: "); slicesPerPerson = input.nextInt(); if (slicesPerPerson >= 1 && slicesPerPerson <= 8) break; else System.out.println("The pizza slice count must be at least 1, but does not exceed 8. Please try again."); } return slicesPerPerson; } public static double computeRoomCost(int guests) { double roomCost; if (guests <= 30) roomCost = 100.00; else roomCost = 200.00; return roomCost; } public static double computeSodaCost(int guests) { double sodaCost = guests * 1.50; return sodaCost; }

这是您“利用返回值的方式”:您无需传递要修改方法的变量,而是将其放在赋值语句的=左侧:

guests = getGuestCount(); slicesPerPerson = getSlicesPerPerson(); roomCost = computeRoomCost(guests); sodaCost = computeSodaCost(guests);

© www.soinside.com 2019 - 2024. All rights reserved.