Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从一个方法调用另一个方法时遇到问题_Java_Arrays - Fatal编程技术网

在Java中从一个方法调用另一个方法时遇到问题

在Java中从一个方法调用另一个方法时遇到问题,java,arrays,Java,Arrays,我设置代码的方法是在一个方法中声明数组,然后在另一个方法中以类似表格的方式打印出来。但是我想在只使用main()函数的情况下执行此操作 我已经删除了大部分不相关的代码,下面是我的代码: public static void main(String[] array) { test2(array); } public static void test() { String[] array = {"1","2","3","4","5","6","7","8","9","10","11

我设置代码的方法是在一个方法中声明数组,然后在另一个方法中以类似表格的方式打印出来。但是我想在只使用main()函数的情况下执行此操作

我已经删除了大部分不相关的代码,下面是我的代码:

public static void main(String[] array) {
    test2(array);
}

public static void test() {
    String[] array = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
}

public static void test2( String[] array ) {
    int count = 0;
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) { 
            System.out.print(array[count] + "\t"); 
            count++;
        }   
        System.out.println();
        System.out.println();
        System.out.println();
    }
}
publicstaticvoidmain(字符串[]数组){
test2(数组);
}
公共静态无效测试(){
字符串[]数组={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
}
公共静态void test2(字符串[]数组){
整数计数=0;
对于(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
系统输出打印(数组[计数]+“\t”);
计数++;
}   
System.out.println();
System.out.println();
System.out.println();
}
}
当我尝试运行它时,它会在“System.out.print(array[count]+“\t”);行中出现java.lang.arrayoutofBond


有人知道这是为什么和/或如何修复吗?

您有几个错误:

  • 您可以在
    test()
    中将
    数组创建为局部变量
  • 您可以使用应用程序的参数作为参数
  • 您甚至不调用
    test()
  • 结果是,调用应用程序时可能没有参数,结果是
    test2()
    方法试图访问空数组的第一个元素,从而导致异常

    这是您应该做的,但是在代码之后继续阅读,我还没有完成:

    public static void main(String[] args) { // This array is defined, but don't use it.
      test2(test());
    }
    
    public static String[] test() {
      return new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
    }
    
    public static void test2( String[] array ) {
      int count = 0;
      for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) { 
          System.out.print(array[count] + "\t"); 
          count++;
        }   
        System.out.println();
        System.out.println();
        System.out.println();
      }
    }
    
    publicstaticvoidmain(String[]args){//已定义此数组,但不要使用它。
    test2(test());
    }
    公共静态字符串[]测试(){
    返回新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
    }
    公共静态void test2(字符串[]数组){
    整数计数=0;
    对于(int i=0;i<4;i++){
    对于(int j=0;j<4;j++){
    系统输出打印(数组[计数]+“\t”);
    计数++;
    }   
    System.out.println();
    System.out.println();
    System.out.println();
    }
    }
    
    此代码仍然存在问题。您确实假设数组中有16个元素。但你不确定。哦,是的,你肯定,因为你已经添加了它们,但你不应该假设情况总是这样

    因此,无论如何,检查元素的实际数量是很好的

    public static void test2( String[] array ) {
      int count = 0;
      for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
          if (count < array.length) {
            System.out.print(array[count] + "\t"); 
            count++;
          }
        }   
        System.out.println();
        System.out.println();
        System.out.println();
      }
    }
    
    publicstaticvoidtest2(字符串[]数组){
    整数计数=0;
    对于(int i=0;i<4;i++){
    对于(int j=0;j<4;j++){
    if(计数<数组长度){
    系统输出打印(数组[计数]+“\t”);
    计数++;
    }
    }   
    System.out.println();
    System.out.println();
    System.out.println();
    }
    }
    
    好吧,它不起作用,因为当“main”调用“test2(array)”时,它什么也不传递,因为main中没有定义“array”

    您想要的数组只存在于“test”方法中

    因此,一个简单的解决方案是将代码更改为:

    public static void main(String[] array) {
        test2(test());
    }
    
    public static String[] test() {
        String[] array = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"};
        return array;
    }
    
    public static void test2( String[] array ) {
        int count = 0;
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) { 
                System.out.print(array[count] + "\t"); 
                count++;
            }   
            System.out.println();
            System.out.println();
            System.out.println();
        }
    }
    
    publicstaticvoidmain(字符串[]数组){
    test2(test());
    }
    公共静态字符串[]测试(){
    字符串[]数组={“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”};
    返回数组;
    }
    公共静态void test2(字符串[]数组){
    整数计数=0;
    对于(int i=0;i<4;i++){
    对于(int j=0;j<4;j++){
    系统输出打印(数组[计数]+“\t”);
    计数++;
    }   
    System.out.println();
    System.out.println();
    System.out.println();
    }
    }
    
    …以便方法test()在main中调用时返回数组


    但是,代码仍然没有多大意义,特别是在面向对象编程中。

    test
    中的变量
    array
    是本地变量。局部变量在声明它们的块之外是不可访问的。
    main
    中的变量
    array
    直接传递给
    test2
    ,但这只是命令行参数,与
    test
    中的
    array
    无关。而且你也没有在任何地方调用
    test()
    。那代码正是我在回答中写的,不折不扣地。。。在你之前整整5分钟。我的答案显示了代码中的所有问题,而不是唯一明显的问题。很抱歉,你觉得我复制了你,但我可能与你同时编写了答案。这很有效!谢谢你帮助我,也谢谢你解释我的错误。