Java从主函数调用print方法并使用来自另一个单独方法的数据

时间:2017-01-19 14:02:47

标签: java arrays

我正在尝试运行一个程序,该程序从用户输入构造一个2D数组,然后打印该数组。必须在一种方法中构造数组,并以单独的方法打印行。我只想在新行上打印数组中的每一行。我不确定如何将数组从一种方法拉到另一种方法。

设置代码所以当调用main方法时,它将调用“构造函数”方法来构建数组,然后在构建数组之后,它将获取该数组并将数据发送到打印每行的打印方法。我不确定从代码中的哪个位置开始,我仍然不明白如何从不同的方法中提取数据。

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
    // THIS METHOD IS THE ONE THAT IS SUPOSED TO PRINT THE ROWS ON NEW LINES
    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, col = 0, arow = 0, acol = 0, 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++;
            }

            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;
    }
}

3 个答案:

答案 0 :(得分:4)

public static void print2DIArray(int[][] output) {    
  int[][] iArray;
  for (int row = 0; row < iArray.length; row++) {

当您调用print2DIArray方法时,您正在尝试迭代刚刚创建的空数组。我想你想迭代传入的“输出”参数。

答案 1 :(得分:2)

您可以像这样更改方法中的名称:

print2DIArray(int[][] iArray)

所以你的代码应该是这样的

//your array can send like an attribute, you can use it like is it
public static void print2DIArray(int[][] iArray) {
    //int[][] iArray you dont need to use another array here

    for (int row = 0; row < iArray.length; row++) {
    //...

答案 2 :(得分:1)

我已经像这样编辑了你的代码。我希望它会有所帮助。

public class Test {

    private static int[][] iArray ;

    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
    // THIS METHOD IS THE ONE THAT IS SUPPOSED TO PRINT THE ROWS ON NEW LINES

    public static void print2DIArray(int[][] output) {
        //int iArray[][] = new int[0][];

        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();
        }
        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++;
            }

            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;
    }

}