Java int不会更新。它会重置

时间:2015-04-22 12:47:26

标签: java int

import java.util.Scanner;

public class test {

    public static void main(String args[]){

        int a = 1000;
        while(a>0){

            System.out.println("Question to prevent infinite while loop");

            Scanner input = new Scanner (System.in);

            int inzet = input.nextInt();

            System.out.println(a);
            test(a);

         }  


    }

    public static void test(int a){


        System.out.println(a);
        a = a + 100;
        System.out.println(a);



        }
    }

我有一个问题。为什么int a没有更新?每次重置为1000。我不希望这样。有人可以帮帮我吗?如果我运行程序,我会得到这个:

Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1000
1000
1100

我想得到这段代码:

Question to prevent infinite while loop
2
1000
1000
1100
Question to prevent infinite while loop
2
1100
1100
1200
Question to prevent infinite while loop
2
1200
1200
1300

此外,这是我的第一篇文章。请给我一些反馈,告诉我下次如何更好地提出问题。

4 个答案:

答案 0 :(得分:1)

您的更新值仅在test方法中可见。您可以将a字段与删除当前声明(包括main方法以及test参数)结合使用:

import java.util.Scanner;

public class test {

  private static int a = 1000;

  public static void main(String args[]) {

    while (a > 0) {
      System.out.println("Question to prevent infinite while loop");

      Scanner input = new Scanner(System.in);

      int inzet = input.nextInt();

      System.out.println(a);
      test();
    }
  }

  public static void test() {
    System.out.println(a);
    a = a + 100;
    System.out.println(a);
  }
}

或者您可以返回方法中的更新值并将返回值分配给a

import java.util.Scanner;

public class test {

  public static void main(String args[]) {

    int a = 1000;
    while (a > 0) {
      System.out.println("Question to prevent infinite while loop");

      Scanner input = new Scanner(System.in);

      int inzet = input.nextInt();

      System.out.println(a);
      a = test(a);
    }
  }

  public static int test(int a) {
    System.out.println(a);
    a = a + 100;
    System.out.println(a);
    return a;
  }
}

答案 1 :(得分:0)

像这样制作a类属性:

public class test {
    static int a = 1000;
    //...
}

答案 2 :(得分:0)

在Java中, int是一个原始对象所以当你将它传递给测试函数时,实际上你传递了这个int的副本。

如果您想通过推荐传递,可以使用IntRef

答案 3 :(得分:0)

第一个答案都是正确的

在此处阅读有关参考与值的更多信息(非专门针对Java):What's the difference between passing by reference vs. passing by value?

这里特别针对Java:Is Java "pass-by-reference" or "pass-by-value"?

第二个解决方案(向您的类添加一个名为a的静态变量)可能会有所不同。由于您的示例非常简单,因此它具有相同的输出。但是当你将static修饰符放到一个变量中时,它将在类的所有实例之间共享