将数组引用回主矩阵的问题

Problem with refrence the array back to main

提问人:NJ_GMD 提问时间:9/28/2020 最后编辑:NJ_GMD 更新时间:9/28/2020 访问量:33

问:

我目前正在处理一个处理(对象数组)概念的作业。

为了解释更多,我主要有三个方法: main - 一个在填充数组后返回数组的方法 - 一个在填充数组后处理数组的方法。

我有一个名为“Commands”的文本文件,我用类“Scanner”和类“File”读取它,这个文本文件通过读取这个文件中的顺序来为我提供我应该执行的命令 - 例如 - “FILL_ARRAY”,它应该通过转到负责填充数组的方法来完成此任务。

在我使用的这些订单之间切换,其中是保存文件中订单的字符串。switch(command) { }command

问题是当我通过第一种方法完成填充数组时,我将数组分配给已在主中创建的数组中,然后我需要在读取单词时将其发送到第二种方法 - 例如 - “PRINT_ARRAY”所以我应该将其发送到数组以在第二种方法中打印, 但该方法显示数组指向 null。returncommand

我在 外部声明了数组并在其中分配了一个 null,但是在开关内部,我分配了来自我首先声明的数组中第一个方法的数组,但它无法识别它。switch(command){ }

所以问题是,我如何在主数组中创建的数组中分配来自第一个方法的数组,以便我可以将其发送到第二个方法?

示例代码(在java中):

import java.util.*;
import java.io.*;

 public class Question {
     public static void main (String [] args){

   //To read from file
    File cmdFile = new File ("Commands");
    Scanner readFromCmd = new Scanner (cmdFile);


       do{

      //declare the array
       String [] nameArray = null;

         //read from file
         String commands = readFromCmn.nextLine();

        //switch cases
        switch (commands){

               case "FILL_ARRAY":
                      nameArray = fillArray();
                      break;

              case "PRINT_ARRAY":
                     printArray(nameArray); //PROBLEM HERE! 
                     break;

            case "QUIT":
                  System.exit(0);                   


         }
         




 }while (true);



 }//main


public static String[] fillArray ()
{
//do task
return nameArray;
}

public static void printArray(String [] nameArray){
//do task

//PROBLEM HERE, WON'T SEE THE ARRAY AS A FILLED ONE, JUST SEE THE NULL.
//WHICH MEANS IT SILL INITIALIZED WITH NULL THAT I ASSIGNED TO THE ARRAY BEFORE THE SWITCH AND DIDN'T SEE 
//THE CHANGES 
}

}//class

那我该怎么办? 感谢

Java 数组 方法 null nullreferenceexception

评论

0赞 Kick Buttowski 9/28/2020
您分配了 null 并将其返回到 fillArray 中?
0赞 NJ_GMD 9/28/2020
是的,我首先分配了一个 null 只是为了初始化数组,然后第一个方法填充了一个新数组,然后将其返回并用从第一个方法返回的新数组重新分配旧数组,所以它应该指向新数组而不是 null。
0赞 Scary Wombat 9/28/2020
public static String[] fillArray () { //do task return nameArray; }- 这到底是怎么编译的?,不在范围内nameArray
0赞 NJ_GMD 9/28/2020
我知道,这只是一个例子,所以想象一下,好像有一个数组,我填充了它,然后我返回了它。

答:

0赞 NJ_GMD 9/28/2020 #1

我明白为什么了。:) 我在 WHILE 循环中将数组的初始化添加为 null!! 因此,每次代码再次经历循环时,它都会再次将其重新分配为 null。谢谢你们的努力,修复后的代码:

import java.util.*;
import java.io.*;

 public class Question {
     public static void main (String [] args){

   //To read from file
    File cmdFile = new File ("Commands");
    Scanner readFromCmd = new Scanner (cmdFile);

       //declare the array
       String [] nameArray = null;

       do{

         //read from file
         String commands = readFromCmn.nextLine();

        //switch cases
        switch (commands){

               case "FILL_ARRAY":
                      nameArray = fillArray();
                      break;

              case "PRINT_ARRAY":
                     printArray(nameArray); //PROBLEM HERE! 
                     break;

            case "QUIT":
                  System.exit(0);                   


         }
         




 }while (true);



 }//main


public static String[] fillArray ()
{
//do task
return nameArray;
}

public static void printArray(String [] nameArray){
//do task

//PROBLEM HERE, WON'T SEE THE ARRAY AS A FILLED ONE, JUST SEE THE NULL.
//WHICH MEANS IT SILL INITIALIZED WITH NULL THAT I ASSIGNED TO THE ARRAY BEFORE THE SWITCH AND DIDN'T SEE 
//THE CHANGES 
}

}//class