【问题标题】:I can't figure out why this value doesn't change [duplicate]我无法弄清楚为什么这个值不会改变[重复]
【发布时间】:2018-05-13 04:46:16
【问题描述】:

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

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


为什么当我在getInfo() 方法的while 循环期间通过递增明确更改它时,它显示numberElements 为0?

【问题讨论】:

    标签: java loops methods printing


    【解决方案1】:

    您没有更改 main 方法中的 numberElement defiend。您正在更改 numberElement 您已经介绍给 getInfo() 作为输入。有两种方法可以实现您的目标:

    1. getInfo()numberElement的名称更改为其他名称。
    2. 返回numberElement,并将main方法中的numberElement值设置为getInfo()的返回值。

    另外我建议你再看看局部变量和全局变量的区别。

    【讨论】:

    • 等等,那字母/数组数组怎么改了,保存到main方法里了?
    • array 被引用传递。
    【解决方案2】:

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

    当您在该方法中时,它是一个新的 var,其值被分配为 0。但它在内存中有一个全新的空间。所以无论方法内部发生什么,都不会影响它之外的任何东西。

    Int 不是通过引用传递的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多