java - 从键盘逐个字符读取消息并存储在最多 256 个字符的数组中

标签 java arrays null

我带着另一个问题来到这里,因为我遇到了障碍并且无法弄清楚问题是什么..

我的问题:创建一个 256 个字符的数组,然后从键盘上一个字符一个字符地读取消息,并将它们存储在数组中(最多 256 个符号)。该方法应返回数组中存储的字符数。 然后将该数组传递给另一个方法以打印一行中消息的每个单词。

我尝试的解决方案:

public static void main(String[] args){
    char[] arrItem7 = new char[256];
    readArray(arrItem7);
    printOneInLine(arrItem7);
}

public static char[] getMsg(){
    String myMessage;
    System.out.print("Input Message: ");
    Scanner input = new Scanner(System.in);
    myMessage = input.nextLine();// Read a line of message
    return myMessage.toCharArray();
}  

public static char[] readArray(char[] arr){
    arr = getMsg();
    return arr;
}

public static void printOneInLine(char[] arr){
    for(int i = 0; i < arr.length; i++){
        if(arr[i] == 0){
            System.out.print(" ");
        }else{
            System.out.print(arr[i]);
        }
    }
    System.out.println();
}   

程序提示输入,但不幸的是,打印出 NULL。将数组设置为我的消息方法时,我一定做错了什么。有人可以帮助我吗?过去 20 分钟我一直在绞尽脑汁..非常感谢

最佳答案

看看这个答案:Is java pass by reference or pass by value

简而言之,Java 是按值传递的。这意味着当您将数组传递到 readArray() 方法时,您实际上只是将对该数组的引用传递到其中。然后,当您将新数组分配给输入参数时,您将覆盖它指向的引用。您没有更改原始数组。所以main方法中的arrItem7仍然指向原来创建的数组。

正如您所发现的,这在您使用它的方式中不起作用。您可以完全删除 readArray() 并将 getMsg 的值直接分配给 arrItem7:

public static void main(String[] args){
    char[] arrItem7 = getMsg();
    printOneInLine(arrItem7);
}

关于java - 从键盘逐个字符读取消息并存储在最多 256 个字符的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51095771/

相关文章:

java - 线程守护状态下具有自定义 ExecutorService 的 CompletableFuture.thenApplyAsync 和 CompletableFuture.runAsync 之间的区别

java - 寻找值(value)并继续前进

javascript - 如何防止数组在for循环中更新?

python - 无法从多个 NumPy 数组中检索所需的索引

java - 在循环之前检查列表是否为空的最佳方法是什么?

mysql - 未显式设置的变量的值是多少?

java - 无法使用 SMTP 使用 JavaMail 和 Amazon SES 发送邮件

java - ListView 和文件选择器

java - 不同长度的二维数组(Java)

c++ - '\0' 和 NULL 可以互换使用吗?