Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要通过省略一些数字来计算数字的总和吗_Java_Arraylist_Operators - Fatal编程技术网

Java 需要通过省略一些数字来计算数字的总和吗

Java 需要通过省略一些数字来计算数字的总和吗,java,arraylist,operators,Java,Arraylist,Operators,#一,。我需要编写一个Java程序,计算从1到10000(包括1和10000)的数字之和,但忽略可被3整除的数字和百位数为2或3的数字(例如8200或5312) 我刚开始工作,但没有工作: public class Sum10000 { public static void main(String[] arg) { long i = 0; long sum = 0; while (i != 10000) { su

#一,。我需要编写一个Java程序,计算从1到10000(包括1和10000)的数字之和,但忽略可被3整除的数字和百位数为2或3的数字(例如8200或5312)

我刚开始工作,但没有工作:

public class Sum10000 {

    public static void main(String[] arg) {
        long i = 0;
        long sum = 0;

        while (i != 10000) {
            sum = sum + i;
            i++;

            if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
                    || (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
                    || (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
                    || (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
                continue;
            }
            System.out.println( i);
            System.out.println(sum);

        }
    }
}
公共类SUM1000{
公共静态void main(字符串[]arg){
长i=0;
长和=0;
而(i!=10000){
sum=sum+i;
i++;

如果((i%3)=0 | |(i>=200&&i=1200&&i=2200&&i=3200&&i=4200&&i=5200&&i=6200&&i=7200&&i=8200&&i=9200&&i,则只应在测试条件后增加总和

while (i != 10000) {
    i++;
    if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399) ||
        (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399) ||
        (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399) ||
        (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
        continue;
    }
    sum += i;
    System.out.println(i);
    System.out.println(sum);
}

你没有跳过你想要的数字


首先,您的循环需要运行,包括您的最后一个数字,因此您应该检查
ipublic class sum1000{

public static void main(String[] arg) {
    
    long sum = 0;

    for (int i = 1, 1!=10001, i++) {

        if (!((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
                || (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
                || (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
                || (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399))) {

            sum = sum + i;

        }
    }
        
    System.out.println(sum);
}
publicstaticvoidmain(字符串[]arg){
长和=0;
对于(inti=1,1!=10001,i++){

如果(!((i%3)=0 | |(i>=200&&i=1200&&i=2200&&i=3200&&i=4200&&i=5200&&i=6200&&i=7200&&i=8200&&i=9200&&i我对这个问题的理解是从总和中省略数字:这就是为什么总和放在
继续
指令之后。

i%1000
可用于获取
i
的最后三位数字:

for (int sum=0, i=1; i<= 10000; ++i) {
    int test = i % 1000;
    
    if ((test >= 200 && test < 400) || i % 3 == 0)
        continue;

    sum += i;
    System.out.println("i   = " + i);
    System.out.println("sum = " + sum);
}
for(int sum=0,i=1;i=200&&test<400)| i%3==0)
继续;
总和+=i;
System.out.println(“i=“+i”);
System.out.println(“sum=”+sum);
}

为什么不以编程方式测试您的条件

int sum = 0;
for (int i = 1; i <= 10000; i++) {
    if (i % 3 == 0) {
        System.out.println("Exclude " + i + ": multiple of " + 3);
        continue;
    }
    String decimal = "" + i;
    if (decimal.length() > 2) {
        char dig3 = decimal.charAt(decimal.length() - 3);
        if (dig3 == '2' || dig3 == '3') {
            System.out.println("Exclude " + i + ": 100s digit is " + dig3);
            continue;
        }
    }
    sum += i;
}
System.out.println(sum);
System.out.println("Or formatted: " + NumberFormat.getIntegerInstance().format(sum));
int和=0;
对于(int i=1;i 2){
char dig3=decimal.charAt(decimal.length()-3);
如果(dig3='2'| | dig3=='3'){
System.out.println(“排除“+i+”:100s位为“+dig3”);
继续;
}
}
总和+=i;
}
系统输出打印项数(总和);
System.out.println(“或格式化:+NumberFormat.getIntegerInstance().format(sum));

使用regex添加一个或多个备选方案,IMO在while或if块中处理3个或3个以上条件时可读性更强:

public static void main(String[] args) {
    int sum = 0;
    for(int i = 1; i <=10_000; i++){
        String s = String.valueOf(i);
        if( i%3 != 0 && !s.matches(".*[23]..") ){
            sum += i;
        }
    }
    System.out.println(sum);
}  
publicstaticvoidmain(字符串[]args){
整数和=0;

因为(inti=1;我很漂亮很干净!哇,这太简单了,很干净了。哇!谢谢!!你说的“没用”是什么意思?它是否给出了错误或不正确的输出?如果是,请在您的问题中说明具体细节。我确实看到了我的错误,谢谢!!对于蒸汽部分,我还不在那里,但会调查一下。看起来很干净。@NoobyOne很乐意帮助。
public static void main(String[] args) {
    int sum = 0;
    for(int i = 1; i <=10_000; i++){
        String s = String.valueOf(i);
        if( i%3 != 0 && !s.matches(".*[23]..") ){
            sum += i;
        }
    }
    System.out.println(sum);
}