在java中编写一个程序,打印50到250(包括50和250)的所有数字的总和,它们是3的倍数,不能被9整除

时间:2016-04-16 04:11:52

标签: java arrays

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

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 个答案:

答案 0 :(得分:2)

我的理念是&#34;更少的代码==更少的错误&#34;:

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

一行。易于阅读和理解。没有错误。

答案 1 :(得分:1)

改变这个:

if(i%3==0 & i%9!=0){

到此:

if(i%3==0 && i%9!=0){

&安培; =按位和运算符

&安培;&安培; =逻辑运算符

Difference between & and && in Java?

答案 2 :(得分:0)

我看到的唯一问题是:

  • 变量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 :(得分:0)

嗯,不要像在这里for(int i=50;i<251;i++)那样触及50到250之间的每一个值,你可以考虑这样的事情......

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