二维阵列扫描仪验证

2D array scanner validation

任何人都可以引导我朝着正确的方向前进。我正在构建一个简单的标记程序,我从 Scanner 获取输入并将其插入到我的二维数组中。我想验证我的输入,使其不低于 0 或高于 100,但如果我的数字不正确,我不希望数组移动到下一个位置。

public static void main(String[] args) 
{
    Scanner input = new Scanner(System.in);//naming the scanner
    String [] student = {"Mark","Jen","Gaby","John","Michael","James"};
    String [] subject = {"Digital electronics","Analogue electronics","Maths","Networks","Telecommunications",
            "Computer applications","Software developemnt","Workshop"};
    String [] printSub = {"Digit","Analo","Maths","Netwo","Telec","Appli","Softw","Works"};
    int maxRow = 6;//setting max row amount int
    int maxCol = 8;//set max column amount int
    int [][] mark = new int [maxRow][maxCol];//declaring the int array and setting the row & column max.
    int i = 0, j = 0;//declaring i and j for use in the for loops 
    int maxMark = 0;//declaring for use in if statement to find highest mark
    int minMark =100;//Declaring for use in if statement to find lowest mark

    for(i = 0; i < maxRow; i++)
    {
        for(j = 0; j < maxCol; j++)
        {
            System.out.print("Please enter "+student[i]+" mark for "+subject[j]+" and press return :");
            mark[i][j]= input.nextInt();
        }
    }

    for(i=0; i < maxRow; i++)
    {           
        for(j=0; j < maxCol; j++)
        {
            if (i == 0 && j == 0)
            {
                System.out.print("Student  \t");
                for(int sub = 0; sub < 8; sub++)
                {
                    System.out.print(printSub [sub]+"\t");
                }
                System.out.println();
                System.out.println();
            }
            if(i < maxRow && j == 0)
            {
                System.out.print(student[i]+"\t \t  ");
            }

            System.out.print(mark [i][j]+"\t");
        }
        System.out.println();
        System.out.println();
    }
}

我不是在寻找答案,我是在寻找更多的推动力,让我可以自己找到答案。

提前感谢您的帮助。

马特

轻推:您不直接将数字插入数组,而是将其插入某个临时变量,检查它然后决定是保存它还是再次询问(需要循环)


剧透1:这里是完整的解决方案,如果你想自己做,不要看那里:) :

    for (i = 0; i < maxRow; i++) {
        for (j = 0; j < maxCol; j++) {
            System.out.print("Please enter ");
            int number = input.nextInt();
            boolean isItOk = false;
            while (isItOk == false) {
                if (number < 0 || number > 100) {
                    System.out.println("You shall not insert a value below 0 or bigger than 100! Try it again");
                    number = input.nextInt();
                } else {
                    isItOk = true;
                }
            }
            mark[i][j] = number;
        }
    }

剧透2:这是一个更好的代码,但对于初学者,我会推荐剧透1的方法,因为它总是可用的。在更复杂的问题中,剧透 2 的解决方案并不总是可行的。

    for (i = 0; i < maxRow; i++) {
        for (j = 0; j < maxCol; j++) {
            System.out.print("Please enter ");
            int number = input.nextInt();
            while (number < 0 || number > 100) {
                System.out.println("You shall not insert a value below 0 or bigger than 100! Try it again");
                number = input.nextInt();
            }
            mark[i][j] = number;
        }
    }
    Scanner s = new Scanner(System.in);
    int number =0;
    System.out.print("Please enter ");
    while(true)
    {
        number = s.nextInt();
        if(number > -1 && number < 101)
            break;
        System.out.println("Marks should be between  0 and 100, Please enter");

    }

您还需要验证输入是否为整数,这可以通过异常处理来完成