如何在 java 中使两个二维数组相等?

How to equal two 2d arrays together in java?

我已经创建了一些如下所示的代码,但是当我尝试使主二维数组等于新的二维数组内容时,它不起作用。我对 2D 数组很陌生,所以任何帮助将不胜感激。

public class Simple2dArray {

private int row= 0;
private int column= 0;
private String [][] mainArray= null;

}

public static void main(String[] args){
   Simple2dArray array= new Simple2dArray (); // (class name is Simple2dArray)
   array.create2d();   //(calls out create2d)

  // array.addStartPosition(); //(calls out addStartPosition)


}

private void create2d(){
String line;


try { 
   FileReader fr= new FileReader("data.txt");
   BufferedReader br= new BufferedReader(fr);


   while ((line = br.readLine()) != null){

                ArrayList<String[]> arrayL= new ArrayList<>();
                while ((line = br.readLine()) != null){        
                String[] splitter= line.split(" ");
                arrayL.add(splitter);
                }//



     }

   }
   br.close();
  }catch (IOException e) {
      System.out.println("error");
  }


}

这是我的解决方案。 您混淆了一些代码行,将它们放在 while 块中,并在 2dArray 填充期间忘记了 doubleFor。在下面的代码中,您可以直接在 main2dArray.

上工作

首先,

private static String [][] main2dArray= null;

然后,在create2d()中,读取文件后,将splitter全部添加到arrayL:

       ArrayList<String[]> arrayL= new ArrayList<>();
       while ((line = br.readLine()) != null){        
          String[] splitter= line.split(" ");
          arrayL.add(splitter);
       }

现在您可以复制 main2dArray 中的所有值,使用双 For:

       main2dArray= new String[arrayL.size()][arrayL.get(0).length];
       for(int i = 0; i<main2dArray.length; i++) {
           for(int j=0; j<main2dArray[0].length;j++)
               main2dArray[i][j] = arrayL.get(i)[j];
       }

所以,当你调用 array.create2d();(我没有修改它)时,输出是:

[[25, S, 92, 78, 2], [14, 21, 52, 2, 4], [2, 61, 11, 24, 7], [56, 45, 16, 57, 4], [32, 15, 98, 13, 6]]

字符 "S" 在正确的位置!

为避免误会,附上完整代码及注释:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class Ciao {
    private static String [][] main2dArray= null;

    public static void main(String[] args) throws IOException{
      array.create2d();   //(calls out create2d)
       addStartPosition();
    }

    private static void create2d(){
        String line;    
        try { 
           FileReader fr= new FileReader("data.txt");
           BufferedReader br= new BufferedReader(fr);

           ArrayList<String[]> arrayL= new ArrayList<>();
           while ((line = br.readLine()) != null){        
              String[] splitter= line.split(" ");
              arrayL.add(splitter);
           }//while

           main2dArray= new String[arrayL.size()][arrayL.get(0).length];
           for(int i = 0; i<main2dArray.length; i++) {
               for(int j=0; j<main2dArray[0].length;j++)
                   main2dArray[i][j] = arrayL.get(i)[j]; 
           }//for
           br.close();
        }catch (IOException e) {
            System.out.println("error");
        }//try-catch    
    }//create2d

    private static void addStartPosition() {
        main2dArray[0][1] = "S";
        System.out.println(Arrays.deepToString(main2dArray));
    }//addStartPosition

}//class

PS:我将您的方法设置为 "static",因此删除了行 Simple2dArray array= new Simple2dArray ();,但没有必要这样做。


EDIT1:我已经尝试了你的新代码(你可以从它的格式中看出我并没有真正接触过它),如果我在 之前添加 int counter=0; 就可以了try-catch 块:


EDIT2:您不能在第一个 while 中使用 line = br.readLine(),否则内部 cicle 将覆盖 line 的值。你必须使用另一个条件,根据你的简单...... 例如:

   boolean flag=true; //condition
   while (flag){

     switch (counter) {
        case (1):
            System.out.println ("case 1");
            break;
        case (2):
             System.out.println ("case 2");
            break;
        case (3):
              System.out.println("case 3");
            break;
        default:
            ArrayList<String[]> arrayL= new ArrayList<>();
            while ((line = br.readLine()) != null){
                //System.out.println(line);
                String[] splitter= line.split(" ");
                arrayL.add(splitter);
            }//
            mainArray= new String[arrayL.size()][arrayL.get(0).length];
            for(int i = 0; i<mainArray.length; i++) {
                for(int j=0; j<mainArray[0].length;j++)
                        mainArray[i][j] = arrayL.get(i)[j]; 
            } //for
         break;
        }//switch
       counter++;

       //for example, we can interrupt the cycle 
       flag=false; //You must set your own condition!
   }//while

现在您的输出将是:

...应该是正确的!

如果你使用 Arraylist:::

,你的预期输出将是这样的
public class Simple2dArray {
    private int row = 0;
    private int column = 0;
    private static String[][] main2dArray = null;

    public static void main(String[] args) throws IOException {

        FileReader fr = new FileReader("E:\Projects\JavaBasics\src\data.txt");
        BufferedReader br = new BufferedReader(fr);
        String line;

        ArrayList<String> stringArray = new ArrayList<>();
        while ((line = br.readLine()) != null) {
            stringArray.add(line);
        }
        main2dArray = new String[stringArray.size()][stringArray.get(0).split(" ").length];
        int lineNo =0;
        for (String inLine:stringArray)
        {
            String[] splitter = inLine.split(" ");

            for (int i=0;i<splitter.length;i++)
            {
                main2dArray[lineNo][i] = splitter[i];
            }
            lineNo++;
        }
        printArray(main2dArray);
        // I dont know why you want to replace this position. if its unintentionaly please remove.
        main2dArray[0][1]="S";
        System.out.println(Arrays.deepToString(main2dArray));
    }

    private static void printArray(String[][] arrays) {
        for (int i =0; i<arrays.length;i++)
        {
            System.out.printf("[");
            for (int j = 0;j<arrays[i].length;j++){
                System.out.printf(" %s ",arrays[i][j]);
            }
            System.out.printf("]");
            System.out.println();
        }
    }
}

试试这个;

private void create2d() {
    String line;        

    try {
        FileReader fr = new FileReader("data.txt");
        BufferedReader br = new BufferedReader(fr);
        ArrayList<String[]> arrayL = new ArrayList<>();
        String[][] dataarray=null;
        while ((line = br.readLine()) != null) {                
            String[] splitter = line.split(" ");
            arrayL.add(splitter);

            // converts arraylist into 2d array.
            dataarray = new String[arrayL.size()][];
            for (int i = 0; i < dataarray.length; i++) {
                dataarray[i] = arrayL.get(i);
            }


        }
        System.out.println(Arrays.deepToString(dataarray));
        mainArray = new String[arrayL.size()][];
        mainArray=Arrays.copyOf(dataarray, dataarray.length);   
        br.close();

    } catch (IOException e) {
        System.out.println("error");
    }

}

private void addStartPosition() {

    mainArray[0][1] = "S";

    System.out.println(Arrays.deepToString(mainArray));

}