有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在一个函数中创建一个变量来保存调用间的值

我想知道如何以及是否可以在函数中定义一个变量,并在每次调用中累积它的值。例如:

public int foo(int num, int cost){
     int sum;
     sum += num*cost;
     System.out.println("all costs are "+ sum);
     return sum; 
}

我希望变量sum从一个调用累积到另一个调用,以便以下调用:

foo(5,3);
foo(2,8);

将打印此输出:

all costs are 15
all costs are 31

我可以用java做这个吗?如果是,那我该怎么做呢。 很抱歉,我不知道我要实现的概念。我知道用其他语言也可以做到


共 (3) 个答案

  1. # 1 楼答案

    您所做的是每次调用foo()方法时,创建具有相同名称的new object of type int。在创建新对象时,以前的值将被覆盖

    但您希望保存该值以供以后使用。因此,要实现这一点,您必须更改变量的scope,并在函数之外声明它。因此,每个方法都可以使用它,并且可以保存其以前的值

    工作代码:

    public class stackInt
    {
        public static int sum=0;  // now every method can access this variable
        public static void main(String[] args)
        {
            foo(5,3);
            foo(2,8);
        }
    
        // according to your output you dont have to set return type as "int"
        public static void foo(int num, int cost)
        {
            sum += num*cost;
            System.out.println("all costs are "+ sum); 
            //return sum; as you have printed the output what you want, so, no need to return "sum"
        }
    }
    

    注意:在打印中,您使用的是cost,但根据输出,它应该是sum,此外,如果您的目标是只打印它,则无需返回sum

  2. # 2 楼答案

    在java中,您可以在类上添加变量,使其看起来像这样:

    int sum=0;
    
    public int foo(int num, int cost){
    
     sum += num*cost;
     System.out.println("all costs are "+ cost);
     return sum; 
    }
    

    然后,该变量只会在foo方法所在的类的每个实例上重置

    如果你想在不同的实例中保持它,你可以这样做

    static int sum=0;
    

    相反

  3. # 3 楼答案

    您要做的是在函数外部创建一个全局变量,用于跟踪变量

    像这样:

    private int sum = 0;
    
    public int foo(int num, int cost){
    
        sum = sum + num * cost;
        System.out.println("all costs are "+ cost);
        return sum; 
    }
    

    如果在方法中定义int sum;,每次调用该方法时,它都会覆盖变量,而这不是您想要的