Как сравнить два 2d массива вместе в Java? - PullRequest
0 голосов
/ 27 ноября 2018

Я создал некоторый код, который показан ниже, однако, когда я пытаюсь сделать основной 2D-массив равным новому содержимому 2D-массива, он не работает.Я довольно плохо знаком с 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");
  }


}

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Ваш ожидаемый результат будет таким, если вы используете 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();
        }
    }
}
0 голосов
/ 27 ноября 2018

Попробуйте это;

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));

}
0 голосов
/ 27 ноября 2018

Вот мое решение.Вы перепутали некоторые строки кода, поместили их в блок while и забыли doubleFor во время заполнения 2dArray.В следующем коде вы можете работать непосредственно с main2dArray .

Прежде всего,

private static String [][] main2dArray= null;

Затем, в create2d () ,после чтения файла добавьте все сплиттер в arrayL :

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

Теперь вы можете скопировать все значения в main2dArray , используяdouble-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: я установил ваши методы как "статические" и, следовательно, удалил строку Simple2dArray array= new Simple2dArray ();, но делать это не обязательно.


EDIT1: я пробовал ваш новый код (по его форматированию видно, что я его не трогал), и он работает, если я добавлю int counter=0; до try-catch block:


EDIT2: вы не можете использовать line = br.readLine() в первом, в то время как внутренний цикл переопределит значение 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

Теперь ваш вывод будет:

screen

... это должно быть правильно!

...