簡體   English   中英

Java中的Split()方法用於多維數組

[英]Split() method in Java for multi-dimensional array

我有一個二維數組。 賦值是接受來自用戶的行號和列號,如果用戶想要逐行(或逐列)輸入數字數據,則必須使用逗號進行操作。 例如,3x3將是:

1,2,4

2,5,3

5,3,2

所以第一行元素將是[0,0] = 1 [0,1] = 2 [0,2] = 3,第二行[1,0] = 2 [1,1] = 5 [1,2 ] = 3,等我知道我應該用字符串做,然后將其拆分為“,”然后將其轉換為沒有整數,但我不知道如何在這種情況下進行拆分。

這是我輸入的行:

for (int row=0; row<board.length; row++){
        for (int column=0; column<board[row].length; column++){
            //System.out.print("["+board[row]+"]["+board[column]+"]: ");
            board[row][column] = myInput.nextInt(); 
            //input validation
            while ((1 > (board[row][column])) || ((board[row][column]) > board.length))
            {
                System.out.println("Please enter number between 1 to "+ board.length +":");
                board[row][column] = myInput.nextInt();
            }
        }
     }  

我認為這是你想要的,假設inputStr存儲用戶輸入:

String[] values = inputStr.split(',');
if(values.length != 2) {
   //Tell them they should enter two numbers
   System.out.println("Please enter two numbers separated by a comma");
}
else {
   try {
      int rowVal = Integer.parseInt(values[0]);
      int columnVal = Integer.parseInt(values[0]);

      System.out.println("The value is: "+board[rowVal][columnVal]);
   }
   catch (NumberFormatException e) {
      //It was comma separated but not two numbers
      System.out.println("Please enter two numbers separated by a comma");
   }
}

對於逐行插入:

//Just to clean up the code
int rows = board.length;
int columns = board[0].lemgth;

String[][] dataValues = new String[rows][columns]
String[] data = new String[rows.length];
//Recieve data
for(int i = 0; i < rows; i++) {
   data[i] = input.nextString();  //modify with however you get a String in.
}
//Parse numbers
for(int i = 0; i < rows; i++) {
   dataValues[i] = data[i].split(',');
   if(dataValues[i].length != columns) {
      throw Exception("Wrong number of columns for row: "+i);
   }
   for(int j = 0; j < columns; j++) {
     try {
       board[row][column] = Integer.parseInt(dataValues[i][j]);
     } catch (NumberFormatException e) {
       throw Exception("Invalid value for ["+i+","+j+"]");
     }
   }
}

您已聲明首先接受行數和列數,因此在開始讀取數字之前,您知道表的尺寸。

所以你真的需要邏輯更新行或列,這取決於你運行的模式。下面是一個不完整的例子。

希望它能讓您了解如何實現它。

public class SplitInputExample {

    int maxRows = 3;
    int maxCols = 3;
    int board[][] = new int[3][3];
    boolean interpretRowise = true;

    private void initialize() {
        for (int i = 0; i < maxRows; i++) {
            board[i] = new int[maxCols];
        }

    }

    /**
     * 
     * @param string input
     * @param rowByRow if true, parse row by row, if false parse col by col
     * @param index index of row/col to update i.e if updating 2nd col, pass 1
     */
    public void split(String string, boolean rowByRow, int index) {

        int limit = 0;
        if (rowByRow){
            limit = maxRows;
        }else{
            limit = maxCols;
        }
        String splitArray[] = string.split(",");
        int inputArray[] = new int[splitArray.length];

        //save the parsed input in an int array
        int counter = 0;
        for (String s: splitArray){
            inputArray[counter++] = Integer.parseInt(s);
        }

        //checks for ensuring input array is of equals rows/cols
        for (int i=0; i<limit; i++){
            //either check rows or cols
            if (rowByRow){
                //fix the row
                board[index][i] = inputArray[i];
            }else{
                //fix the col
                board[i][index] = inputArray[i];
            }
        }

    }

    public void print(){
        for (int row[]: board){
            for(int col: row){
                System.out.print(col);
            }
        }
    }

    public static void main(String args[]) {
        String input[] = {
            "1,2,3",
            "4,5,6",
            "7,8,9"
        };
        SplitInputExample example = new SplitInputExample();

        int index = 0;
// parse row-wise i.e 1,2,3 are values of row 0, for each column
        for (String s: input){
            example.split(s,true,index++);
        }
        example.print();
        System.out.println("\n");

        index = 0;
//reset index to 0 and parse column-wise i.e 1,2,3 are values of column 0 for each row
        for (String s: input){
            example.split(s,false,index++);
        }

        example.print();
    }
}

這是解決方案:

    public static int getInputByRow(int[][] board, int v)
{

            for (int i=0; i<board.length; i++){
                int j=0;        
                String line = myInput.next();
                String[] splitarr = line.split(",");

                        for (String num : splitarr){                        
                                v = Integer.parseInt(num);
                                board[i][j++] = v;  
                        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM