微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确定哈希表中的一对值是否满足条件?

如何解决如何确定哈希表中的一对值是否满足条件?

我试图在数组中输入值对 (i,j) 以确定其中有多少对符合以下条件:1

public static void main(String[] args) {
        int oldVal[][] = new int [20][2];
        boolean loopAgain = true;
        Scanner scan = new Scanner(system.in);
        int num = 0;
        int i = 0;
        do {
            System.out.print("Enter input 1:");
            int input1 = scan.nextInt();

            System.out.print("Enter input2:");
            int input2 = scan.nextInt();
                
                oldVal[i][0] = input1;
                oldVal[i][1] = input2;
                i++;

            System.out.print("Enter another input (y/n)?");
            String answer = scan.next();

            if (answer.equals("y") || answer.equals("Y")) {
                continue;
            } else {
                for (int x = 0; x < oldVal.length; x++) {
                    if (oldVal[x][0] <= 1 && oldVal[x][0] < oldVal[x][1] && oldVal[x][1] <= 20) {
                        num++;
                    }
                }
                System.out.print("Output number is %d.\n" + num);
                break;
            }
            
        } while (loopAgain);
        scan.close();
    }
}

谢谢!

解决方法

你的 if 条件不好。您的伪代码声明 1

if (1 <= oldVal[x][0]  && oldVal[x][0] < oldVal[x][1] && oldVal[x][1] <= 20) {
   num++;
}

另一方面,用于检查“y”输入的 if 条件的设计很糟糕,您应该简单地否定条件并去掉 continue 语句。我还会使用正则表达式,这样用户可以输入 y、Y、是、是、是、是、是、是、是,所有这些都可以工作。此外,可以使用 for each(或增强 for)来改进 for 循环。此外,为了代码可读性,您应该在 if 块内和 for 循环之前声明 num 变量。另外,如果在打印输出后使用 break 语句离开 while 循环,loopAgain 的用途是什么?只需写 while(true),或者最好添加一个 loopAgain=false 而不是 break。添加所有这些更改将导致:

if (!answer.matches("[yY].*")) {
   int num = 0;
   for (int[] ints : oldVal) {
      if (1 <= ints[0] && ints[0] < ints[1] && ints[1] <= 20) {
         num++;
      }
   }
   System.out.printf("Output number is %d.%n",num);
   loopAgain=false;
}

另外,注意如果你想使用 %d 的东西,你应该调用 System.out.printf(不是 println),而不是 \n 你应该使用 %n。

既然它工作正常,我建议你更新到 java 16 并研究做它的新方法(使用 Stream 而不是二维数组,或使用 HashMap,使用 lambdas、Stream.filter、Stream.count,并在局部变量中使用 var 而不是显式类型)。它会帮助你。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。