首页 > 解决方案 > JAVA 方法返回意外值

问题描述

我是一个非常新的java程序员,下面的代码是我第一次尝试自己的项目。我确定代码是一团糟,请原谅我。

在下面的代码中,提示用户输入 1 到 50 之间的 5 个值。我将输入值放入 int[]。我想验证数字是否在范围内,因此我将值传递给方法。我的问题:如果值在范围内,则返回它,然后 for 循环递增重复 - 良好行为 如果输入了无效值,则检查完成,将显示错误消息并提示用户重新输入正确的值。如果输入了一个无效条目并在第二次尝试时输入了正确的值,则返回正确的值 - 良好行为 如果输入了两个无效条目,则第二个无效条目以某种方式被传递回 for 循环并被添加到数组中 - 不好行为

我确信我缺少一些简单的东西。

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.print("you get 5 elements between 01 & 50:");
    int a[] = new int[5];
    System.out.println("\nEnter all the elements:");
    for(int i = 0; i < 5;)
    {
        int b = in.nextInt();
        a[i] = checkNum(b);
        i++;
    }
    System.out.println("Numbers:" + Arrays.toString(a));
    in.close();
}

static int checkNum(int z) {
    Scanner s = new Scanner(System.in);
    if (z>0 && z<51) {
        return z;
    } else {
        System.out.println("Invalid Entry!! Enter a valid number between 01 & 50");
        int qz = s.nextInt();
        z = qz;
        checkNum(qz);
    }
    return z;
}

标签: java

解决方案


问题出在你的checkNum(),你在这里使用递归,我认为你不知道这一点(如果你这样做很好)。

你需要returncheckNum(qz) 值,我已经稍微简化了你的逻辑。

static int checkNum(int z) {
    if (z<1 || z>50) // check for false value 
    {
        System.out.println("Invalid Entry!! Enter a valid number between 01 & 50");
        Scanner s = new Scanner(System.in);
        return checkNum(s.nextInt());
    }
    return z;
}

推荐阅读