priya
priya

Reputation: 29

Is my allocation of memory to Java 2d array is wrong or what is happening at runtime?

I tried getting String input from the user. But it fails with to receive input at arr[0][0].

About Program: In dynamic 2d array program search a string in that array matrix and return true or false.

class SearchString{ 
    public static void main(String[] args){ 
        int n, m; 
        System.out.println("Enter the size of 2d array: "); 
        Scanner s = new Scanner(System.in); 
        n = s.nextInt(); 
        m = s.nextInt(); 

        String[][] arr = new String[n][m]; 
        System.out.println("Enter the elements: "); 
        for(int i = 0; i < arr.length; i++){ 
            for(int j = 0; j < arr[i].length; j++){   
                System.out.println("arr["+i+"] ["+j+"]"); arr[i][j] = s.nextLine(); 
            } 
        } 
    } 
}
Enter the size of 2d array: 
2
2
Enter the elements: 
arr[0] [0]
arr[0] [1]
AMerica
arr[1] [0]
Uk
arr[1] [1]
France

Upvotes: 0

Views: 45

Answers (2)

Patric
Patric

Reputation: 1627

Assuming you use the [enter] key to submit your values, you should add a s.skip("\n"); after getting the array size, so that the first position of your 2d array is not ignored:

  public static void main(String[] args) {
        int n, m, flag = 0;
        System.out.println("Enter the size of 2d array: ");
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        m = s.nextInt();
        s.skip("\n");
        String[][] arr = new String[n][m];
        System.out.println("Enter the elements: ");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println("arr[" + i + "] [" + j + "]");
                arr[i][j] = s.nextLine();
            }
        }

        System.out.println("Done! Content of your 2d array:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println("arr[" + i + "] [" + j + "] = " + arr[i][j]);
            }
        }
    }

Upvotes: 0

anthony yaghi
anthony yaghi

Reputation: 550

do a

s.nextLine();

After reading the int values (m and n). To clear the eol caracter before using s.nextline to read the input

public static void main(String[] args){
    int n, m;
    System.out.println("Enter the size of 2d array: ");
    Scanner s = new Scanner(System.in);
    n = s.nextInt();
    m = s.nextInt();
    s.nextLine();
    String[][] arr = new String[n][m];
    System.out.println("Enter the elements: ");
    for(int i = 0; i < arr.length; i++){
        for(int j = 0; j < arr[i].length; j++){
            System.out.println("arr["+i+"] ["+j+"]"); arr[i][j] = s.nextLine();
        }
    }
}

Upvotes: 5

Related Questions