3

私は2次元配列を持っています。割り当ては、ユーザーから行と列の番号を受け入れることであり、ユーザーが数値データを行ごとに (または列ごとに) 入力したい場合は、カンマで入力する必要があります。たとえば、3x3 は次のようになります。

1,2,4

2,5,3

5,3,2

したがって、最初の行の要素は [0,0]=1 [0,1]=2 [0,2]=3、2 行目の [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();
            }
        }
     }  
4

3 に答える 3

0

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+"]");
     }
   }
}
于 2012-10-20T00:54:59.237 に答える
0

解決策は次のとおりです。

    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;  
                        }
}
于 2012-11-02T20:03:36.890 に答える
0

最初に行と列の数を受け入れると述べたので、数値を読み始める前に、テーブルの次元を知っています。

したがって、実行しているモードに応じて、行または列を更新するかどうかを論理的に判断する必要があります。以下は不完全な例です。

うまくいけば、それを達成する方法についてのアイデアが得られます。

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();
    }
}
于 2012-10-20T01:42:37.580 に答える