有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组用java编写一个程序来打印从50到250(包括50和250)的所有数字的总和,这些数字是3的倍数,不能被9整除

/*当我运行此代码时,没有错误,事实上生成的输出也是正确的,但我想知道此代码中的逻辑错误是什么?请任何人解释一下逻辑错误是什么*/

class abc
    {
        public static void main(String arg[]){
        int sum=0;
        //for-loop for numbers 50-250
        for(int i=50;i<251;i++){
            // condition to check if number should be divided by 3 and not divided by 9 
            if(i%3==0 & i%9!=0){
                //individual number which are selected in loop
                System.out.println(i);
                //adding values of array so that total sum can be calculated
                sum=sum+i;   
            }   
        }
        //final display output for the code 
        System.out.println("the sum of intergers from 50 to 250 that are multiples of 3 and not divisible by 9 \n"+sum);
    }
}

共 (4) 个答案

  1. # 2 楼答案

    我的理念是“更少的代码=更少的bug”:

    int sum = IntStream.rangeClosed(50, 250)
        .filter(i -> i % 3 == 0)
        .filter(i -> i % 9 != 0)
        .sum();
    

    一行。易于阅读和理解。没有虫子

  2. # 3 楼答案

    我看到的唯一问题是:

    • 变量sum未声明
    • &&代替&

    int sum = 0;
    for (int i = 50; i <= 250; i++) {
        if (i % 3 == 0 && i % 9 != 0) {
            System.out.println(i);
            sum = sum + i;
        }
    }
    System.out.println("the sum of intergers from 50 to 250 that are multiples of 3 and not divisible by 9 \n" + sum);
    
  3. # 4 楼答案

    嗯,不是像你在这里所做的那样从50到250触摸每一个值^ {CD1>},你可以考虑这样的事情…

    int i = 48;
    int sum = 0;
    while(i < 250) {
        i += 3;
        if(i%9 != 0)
            sum += i;
    }
    

    这在某种程度上是优化的,因为我跳过了我知道不可能的候选值

    但是,代码中有一个更大的问题。下面的代码块打印true,当然。但是,依赖&是一个坏主意,因为这不是它的工作。&表示按位AND,而&&表示逻辑AND,这正是您要做的

    boolean t = true;
    boolean f = false;
    System.out.println(f&t);
    

    为什么

    在Java中,如果它是一个&&操作,只要找到第一个false,就可以确定表达式的计算结果为false。同时,在实施过程中,需要对双方进行评估f&t的计算结果将为false,但JVM需要同时查看ft变量。同时,在使用&&时,它甚至不需要查看t