我无法弄清楚为什么这个值不会改变

时间:2018-05-13 04:46:17

标签: java loops methods printing

以下是我正在搞乱的代码的一部分:

import java.util.Scanner;
public class Hwk12 {
public static void main(String args[])
{
    final int ARRAY_SIZE = 100;
    int numberElements = 0;
    char[] array = new char[ARRAY_SIZE];
    getInfo(array, numberElements);
    System.out.println(array);
    System.out.println("1");
    System.out.println(numberElements);
    System.out.println(array.length);
}
public static void getInfo(char[] letters, int numberElements)
{
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please enter some letters or -1 to quit: ");
    String input = keyboard.nextLine();
    char characterInput = input.charAt(0);
    while(!input.equals("-1") && numberElements < letters.length)
    {
        letters[numberElements] = characterInput;
        numberElements++;
        System.out.print("Please enter some letters or -1 to quit: ");
        input = keyboard.nextLine();
        characterInput = input.charAt(0);
}

当我运行并输入内容时,这是输出:

  

请输入一些字母或-1以退出:a

     

请输入一些字母或-1以退出:s

     

请输入一些字母或-1以退出:d

     

请输入一些字母或-1以退出:f

     

请输入一些字母或-1以退出:s

     

请输入一些字母或-1以退出:a

     

请输入一些字母或-1以退出:d

     

请输入一些字母或-1以退出:f

     

请输入一些字母或-1以退出:a

     

请输入一些字母或-1以退出:s

     

请输入一些字母或-1以退出:df

     

请输入一些字母或-1以退出:d

     

请输入一些字母或-1以退出:-1

     

asdfsadfasdd

     

1

     

0

     

100

为什么当我在numberElements方法的while循环中通过增加它来明确更改它时,它会将getInfo()显示为0?

2 个答案:

答案 0 :(得分:0)

您没有更改main方法中的<%= link_to 'Prev Page', page: -1.to_i %> <%= link_to 'Next Page', page: +1.to_i %> defiend。您正在将numberElement更改为numberElement作为输入。有两种方法可以实现目标:

  1. getInfo()numberElement的名称更改为其他内容。
  2. 返回getInfo(),并将main方法中的numberElement值设置为numberElement返回的值。
  3. 我还建议您再次查看本地和全局变量之间的区别。

答案 1 :(得分:0)

这是范围。您在方法之外声明了变量。那个var就是一个int。

当你进入方法时,它是一个新的var,它的值被赋值为0.但它在内存中有一个全新的空间。因此无论发生在方法内部的任何事情都不会影响它之外的任何事情。

Int不通过引用传递。

通过引用传递数组。当在方法内部进行更改时,原始声明的变量会发生变异。