简体   繁体   中英

Java 2D array with user input

im stuck on a problem with my java program in when I input numbers it will return index out of bounds error. the line is 66 wheres its getting caught up on.

    arrayName[row][col] = holder;

any help in figuring out the problem would be most helpful. full program below

   package workfiles;

   import java.util.*;
   import java.util.Scanner;

 public class prob2 {

// Do not modify this method
public static void main(String[] args) {

    try
    {
        int [][] iArray = enter2DPosArray();
        System.out.println("The original array values:");
        print2DIArray(iArray);
        int [][] tArray = transposition(iArray);
        System.out.println("The transposed array values:");
        print2DIArray(tArray);
    }

    catch (InputMismatchException exception)
    {
        System.out.println("The array entry failed. The program will now halt.");
    }

}

    // A function that prints a 2D integer array to standard output
    // It prints each row on one line with newlines between rows
    public static void print2DIArray(int[][] output) {

    }

// A function that enters a 2D integer array from the user
// It raises an InputMismatchException if the user enters anything other
// than positive (> 0) values for the number of rows, the number of
// columns, or any array entry
public static int[][] enter2DPosArray() throws InputMismatchException {

    int row=0;
    int col=0;
    int arow=0;
    int acol=0;
    int holder=0;
    Scanner numScan = new Scanner(System.in);

    while (row<=0){
        System.out.print("How many rows (>0) should the array have? ");
        row = numScan.nextInt();
    }

    while (col<=0){
        System.out.print("How many columns (>0) should the array have? ");
        col = numScan.nextInt();
    }
    int[][] arrayName = new int[row+1][col+1];

    while (arow < row) {

        if (acol<=col)
            System.out.println("Enter a positive (> 0) integer value: ");
            holder = numScan.nextInt();
   // !!!line 66 begins right here!!!
            arrayName[arow][acol] =  holder;
            acol ++;

        if (acol>col)
            acol=0;
            arow ++;
            System.out.println("Enter a positive (> 0) integer value: ");
            holder = numScan.nextInt();
            arrayName[arow][acol] = holder;
            acol ++;



    }
    //arrayName[i][j]
    numScan.close();
    return arrayName;
}

public static int[][] transposition(int [][] arrayName) {

    int r=0, c=0;

    int[][] transpose = new int[r][c];
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            transpose[i][j] = arrayName[j][i];
        }
    }
    return transpose;
}

 }

I reinstalled eclipse to my computer and removed one while loop, which kept setting values to zero, and changed it to an if statment so it only happend once, I can't explain how or why that was running a out of bounds error, but the program works correctly now.

    package workfiles;



    import java.util.*;
    import java.util.Scanner;

    public class hw2 {

   // Do not modify this method
   public static void main(String[] args) {

    try
    {
        int [][] iArray = enter2DPosArray();
        System.out.println("The original array values:");
        print2DIArray(iArray);
        int [][] tArray = transposition(iArray);
        System.out.println("The transposed array values:");
        print2DIArray(tArray);
    }

    catch (InputMismatchException exception)
    {
        System.out.println("The array entry failed. The program will now halt.");
    }

}

    // A function that prints a 2D integer array to standard output
    // It prints each row on one line with newlines between rows
    public static void print2DIArray(int[][] output) {
    int iArray[][];

        for (int row = 0; row < iArray.length; row++) {
            for (int column = 0; column < iArray[row].length; column++) {
                System.out.print(iArray[row][column] + " ");
            }
            System.out.println();
        }
    }



// A function that enters a 2D integer array from the user
// It raises an InputMismatchException if the user enters anything other
// than positive (> 0) values for the number of rows, the number of
// columns, or any array entry
public static int[][] enter2DPosArray() throws InputMismatchException {

    int row=0;
    int col=0;
    int arow=0;
    int acol=0;
    int holder;
    Scanner numScan = new Scanner(System.in);

    while (row<=0){
        System.out.print("How many rows (>0) should the array have? ");
        row = numScan.nextInt();
    }

    while (col<=0){
        System.out.print("How many columns (>0) should the array have? ");
        col = numScan.nextInt();
    }
    int[][] iArray = new int[row][col];

    while (arow < row) {

        while (acol < col) {
            System.out.println("Enter a positive (> 0) integer value: ");
            holder = numScan.nextInt();
            iArray[arow][acol] = holder;
            acol++;
        }

     //this is where i replaced the while loop for the if statment, in the while loop it kept on resetting the acol value. there was no need to loop that part of the program.    

     if  (acol >= col) {
           acol = 0;
           arow ++;

        }



    }
    //arrayName[i][j]
    numScan.close();
    return iArray;
}

public static int[][] transposition(int [][] iArray) {

    int r=0, c=0;

    int[][] transpose = new int[r][c];
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            transpose[i][j] = iArray[j][i];
        }
    }
    return transpose;
  }

}

Give this a try:

    if (acol <= col) {
        System.out.println("Enter a positive (> 0) integer value: ");
        holder = numScan.nextInt();
        arrayName[arow][acol] = holder;
        acol++;
    }
    if (acol > col) {
        acol=0;
        arow ++;
        System.out.println("Enter a positive (> 0) integer value: ");
        holder = numScan.nextInt();
        arrayName[arow][acol] = holder;
        acol++;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM