Dinesh Solanki
Dinesh Solanki

Reputation: 43

initialize only some elements of array in java

So I want to skip the first and last elements of the array to initialize. What am I doing wrong?

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

    //Write code here
    Scanner sc = new Scanner(System.in);
    System.out.println("Input Rows: ");
    int m = sc.nextInt();
    System.out.println("Input Columns: ");
    int n = sc.nextInt();
    System.out.println("Enter values: ");
    int[][] arr = new int[m][n];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (arr[i][j] == arr[0][0] || arr[i][j] == arr[m][n]) {
                continue;
            } else {
                arr[i][j] = sc.nextInt();
            }
        }

        System.out.println();
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }

}

Here is my output:

Input Rows: 
3

Input Columns:
3

Entered Values:

0 0 0 

0 0 0 

0 0 0 

Upvotes: 0

Views: 139

Answers (4)

Kepotx
Kepotx

Reputation: 1082

You compare the value of arr[i][j] with the value of arr[0][0]. You should instead compare i==0 && j==0 || i==m -1 && j==n -1

As your array was empty, and as you start the loop, arr[i][j] was equal to arr[0][0], skipping the first element. but for the next loop, arr[i][j] was still empty, and as you compare it to a non-initialised value, it's always true, skipping in each step

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

    //Write code here
    Scanner sc = new Scanner(System.in);
    System.out.println("Input Rows: ");
    int m = sc.nextInt();
    System.out.println("Input Coloumns: ");
    int n = sc.nextInt();
    System.out.println("Enter values: ");
    int[][] arr = new int[m][n];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (i==0 && j==0 || i==m-1 && j==n-1) {
                continue;
            } else {
                arr[i][j] = sc.nextInt();
            }
        }

        System.out.println();
    }
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            System.out.print(arr[i][j] + " ");
        }
        System.out.println();
    }

}

Upvotes: 1

kailoon
kailoon

Reputation: 2069

You don't need to check whether the array items are equal, you just want to check whether the row and column are equal to the last and first.

Upvotes: -1

Thomas Timbul
Thomas Timbul

Reputation: 1733

In this line:

if (arr[i][j] == arr[0][0] || arr[i][j] == arr[m][n]) {

You are testing for the equality of values within your array. You should be comparing whether the indices you are looking at are the beginning or end of the array. That is to say, you want to compare whether (in pseudo code):

i==0 and j==0, OR i==max index in its dimension and j==max index in its dimension

I have deliberately omitted the literal answer, because this looks a tiny bit like homework.

Upvotes: 2

Md Johirul Islam
Md Johirul Islam

Reputation: 5162

You need to change the if condition inside the loop like following:

for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        if ((i == 0 && j==0) || (i == m -1 && j == n -1)) {
            continue;
        } else {
            arr[i][j] = sc.nextInt();
        }
    }

    System.out.println();
}

Upvotes: 2

Related Questions