在while循环中打印数组

时间:2019-05-01 16:46:55

标签: java arrays loops

我试图在用户输入y或Y时使用方法调用将数组打印一次。我不知道如何使数组仅打印一次。

我已经研究并尝试调整自己的代码,但我迷路了。

public class Lab10p1 {
public static final int ROW = 5;
public static final int COL = 6;
public static final int MIN = 0;
public static final int MAX = 100;

/**
* @param args the command line arguments
*/
public static void main(String[] args) 
{
    Scanner scan=new Scanner(System.in);
    System.out.println("Do you want to start Y/N?");
    char c =scan.next().charAt(0);

    while(c=='y'||c=='Y')
    {
        int[][] a = new int[ROW][COL]; 
        randArray(a, ROW, COL, MIN, MAX);
    }
}

public static void randArray(int[][] matrix, int row, int col, int low, int up)
{     
    Random rand = new Random();   
    for (int r = 0; r < row; r++)
    {          
        for (int c = 0; c < col; c++)   
        {         
            int are=matrix[r][c] = rand.nextInt(up - low + 1) + low; 
            System.out.print(" "+are); 
        }       
        System.out.println();
    }
}

预期输出为

是否要继续(是/否):y
数组元素是:
12 31 12 21 45 23
32 12 67 54 35 67
34 54 33 34 53 34
23 34 43 23 45 78
23 54 89 76 54 34

实际结果是打印6x5阵列的无限循环

4 个答案:

答案 0 :(得分:0)

您应该使用if而不是while。如果用户输入Yy,则循环将永远不会结束,因为循环内的cY不会设置为y或其他任何值,因此循环条件始终为真。

如果要在每个打印的数组后再次询问用户,则必须将问题包括在循环中,但是在这种情况下,我希望使用do while循环。

答案 1 :(得分:0)

一旦您打印array。提示用户再次输入字符,因此,如果他/她再次输入Y,则再次打印数组,如:

while(c=='y'||c=='Y')
{
    int[][] a = new int[ROW][COL]; 
    randArray(a, ROW, COL, MIN, MAX);
    System.out.println("Do you want to start Again Y/N?");
    c = scan.next().charAt(0);
}

或者,如果您希望程序仅运行一次,则将while替换为if

答案 2 :(得分:0)

之所以发生这种情况,是因为您只输入一次'c'的值并保持迭代,现在它进入了无限循环,因为'c'的值根本没有改变。

char c =scan.next().charAt(0);
int[][] a;
while(c=='y'||c=='Y')
{

a = new int[ROW][COL]; 
randArray(a, ROW, COL, MIN, MAX);
c =scan.next().charAt(0);
}

此外,您不必每次都重新声明2D数组。


另外,您可以使用更适合此类情况的do-while循环。

答案 3 :(得分:0)

两种方式

 if(c=='y'||c=='Y')
{
    int[][] a = new int[ROW][COL]; 
    randArray(a, ROW, COL, MIN, MAX);
}

 while(c=='y'||c=='Y')
{
    int[][] a = new int[ROW][COL]; 
    randArray(a, ROW, COL, MIN, MAX);
    break;
}