java - 修改java中循环的最大值(for和while,..)

标签 java

我尝试更改循环的最大值以延长治疗时间; 当我按如下方式更改最大值时,一切都会按我想要的方式进行:

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        Integer n=10;
        int i=0;
        List<String> lis = new ArrayList<>();
        while (i<n) {
            i++;
            //System.err.println(n);
            lis.add("1");
            //chengeMaxvalue(n, lis);
            System.out.println(n);
            n=20;// this line modify the limit value in loop
        }
        lis.stream().forEach(System.out::println);
    }

    private static void chengeMaxvalue(int n, List<String> lis) {
        lis.add("2");
        n=20; // this line don't modify the limit value in loop
    }
}

但是当我尝试在嵌套函数(//注释代码)内修改它时,它不起作用。但对于列表,我可以在嵌套函数内添加元素。

intList 的作用域不同吗?

最佳答案

chengeMaxvalue 的问题方法的特点是该方法的参数是按值传递的 int值(而不是引用值)。因此,n的值传入该方法的是 n 的副本main 中的变量方法,内存中的值不相同。

要解决这个问题,您可以使用 static两者之外的变量 mainchangeMaxvalue并更改 changeMaxvalue 中的值方法:

public class Test {

    private static int n = 10;

    public static void main(String[] args) {

        int i=0;
        List<String> lis = new ArrayList<>();
        while (i<n) {
            i++;
            lis.add("1");
            System.out.println(n);
            changeMaxvalue(lis);
        }
        lis.stream().forEach(System.out::println);

    }

    private static void chengeMaxvalue(List<String> lis) {
        lis.add("2");
        n=20;
    }

}

您还可以将上限封装在类中,以便方法参数通过引用传递,而不是通过值传递:

public class UpperBound {

    private int n;

    public UpperBound(int n) {
        this.n = n;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }
}

public class Test {

    public static void main(String[] args) {

        UpperBound upperBound = new UpperBound(10);
        int i=0;
        List<String> lis = new ArrayList<>();
        while (i < upperBound.getN()) {
            i++;
            lis.add("1");
            System.out.println(n);
            changeMaxvalue(upperBound, lis);
        }
        lis.stream().forEach(System.out::println);

    }

    private static void chengeMaxvalue(UpperBound upperBound, List<String> lis) {
        lis.add("2");
        upperBound.setN(20);
    }

}

有关按值传递与按引用传递的详细信息,请参阅 Passing by Value vs. Passing by Reference in Java .

关于java - 修改java中循环的最大值(for和while,..),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969859/

相关文章:

java - 从java调用Delphi的类

java - 使用 JFrame 的 Java 窗口背景图像

java - 无效的 key 代码@java

java - 一个标签库可以被多个uri引用吗?

java - LIMIT_BUFFER=true 标志在 Tomcat 中的作用

java - 从 ISO8601 日期时间字符串中提取时区

java - 使用 Mule ESB 的 LDAP 连接器在搜索时获得一致的响应

java - 具有涉及递归调用的循环的函数的运行时

Java FileWriter 拒绝覆盖

java - 如何设计一个类层次结构,在不实例化的情况下提供有关子类的信息