【问题标题】:Display the sum of all raised odd and even number using loop and control structures使用循环和控制结构显示所有奇数和偶数的总和
【发布时间】:2020-03-22 01:37:58
【问题描述】:

我需要创建一个 Java 程序,它将接受 10 个整数,如果输入的数字是奇数,则将其提升到 ^1 次方,如果用户输入另一个奇数,则再次将其提升到下一个次方 ^2,与偶数相同但是,功率从 10 开始,并且在输入的每个偶数中都会减少。之后,我必须显示所有偶数和奇数的总和。

难的是不允许使用数组和java.util.Math。

例如:

程序要求用户输入10个整数:

用户输入(整数 1-10):

1 ^ 1 = 1(奇数)

2 ^ 10 = 1024(偶数)

3 ^ 2 = 9(奇数)

4 ^ 9 = 262 114(偶数)

5 ^ 3 = 125(奇数)

6 ^ 8 = 1 679 616(偶数)

7 ^ 4 = 2 401(奇数)

8 ^ 7 = 2 097 152(偶数)

9 ^ 5 = 59 049(奇数)

10 ^ 6 = 1 000 000(偶数)

输出: 偶次幂之和

奇数次幂的总和

感谢 Devon,我尝试运行程序但出现逻辑错误。

public class SumOfOddEvenMain {

public static void main(String[] args) {
    SumOfOddEven temp = new SumOfOddEven();
    System.out.println(temp.Run());
}

}

import java.util.Scanner;

public class SumOfOddEven {
private long sumOfOdds;
private long sumOfEvens;
private int countOfOdds;
private int countOfEvens;

public SumOfOddEven() {
    countOfOdds = 1;
    countOfEvens = 10;
    sumOfOdds = 0;
    sumOfEvens = 0;
}
public String Run() {
    Scanner in = new Scanner(System.in);

    for(int i = 0; i < 10; i++){
        System.out.println("Enter integer number " + i);
        int number = in.nextInt();

        if(number % 2 == 0) {
            for(int j = countOfEvens; j > 1; j--) {
                number *= number;
            }

            sumOfEvens += number;
            countOfEvens--;
        }
        else {
            for(int k = countOfOdds; k > 1; k--) {
                number *= number;
            }

            sumOfOdds += number;
            countOfOdds++;
        }
    }

    in.close();
    return "Sum of odds: " + sumOfOdds + "\nSum of evens: " + sumOfEvens;
}

}

程序输出:

Enter integer number 0
1
Enter integer number 1
2
Enter integer number 2
3
Enter integer number 3
4
Enter integer number 4
5
Enter integer number 5
6
Enter integer number 6
7
Enter integer number 7
8
Enter integer number 8
9
Enter integer number 9
10
Sum of odds: -495568963
Sum of evens: 0

【问题讨论】:

  • 请发布您为解决此问题而编写的代码,以及您遇到的问题。
  • "...不允许使用数组和 java.util.Math":没问题 (:-))。你可以在没有这些的情况下度过难关。你觉得这个作业最麻烦的是什么?
  • 是的,我们的教练说如果我们遇到 int 错误就使用 float。整数最大值 = 2,147,483,647

标签: java algorithm loops formula control-structure


【解决方案1】:

你可以这样做:

import java.util.Scanner;

public class SumOfOddEven {    
    public static void main(String[] args) {
        int sumOddInts = 0, sumEvenInts = 0, countOddInts = 1, countEvenInts = 10;
        Scanner in = new Scanner(System.in);
        for (int i = 1; i <= 10; i++) {
            System.out.println("Count: " + i + ", enter an integer (from 1 to 10): ");
            int number;
            do {
                number = in.nextInt();
                if (!(number >= 0 && number <= 10)) {
                    System.out.println("Try again, enter an integer (from 1 to 10): ");
                } else {
                    if (number % 2 == 0) {
                        sumEvenInts += power(number, countEvenInts--);
                    } else {
                        sumOddInts += power(number, countOddInts++);
                    }
                }
            } while (!(number >= 0 && number <= 10));
        }
        in.close();
        System.out.println("The sum of even powered: " + sumEvenInts);
        System.out.println("The sum of odd powered: " + sumOddInts);
    }

    static int power(int n, int power) {
        int num = 1;
        for (int i = 1; i <= power; i++) {
            num *= n;
        }
        return num;
    }
}

注意:上面给出的程序将数字限制为1到10,以避免整数溢出

示例运行:

Count: 1, enter an integer (from 1 to 10): 
12
Try again, enter an integer (from 1 to 10): 
3
Count: 2, enter an integer (from 1 to 10): 
5
Count: 3, enter an integer (from 1 to 10): 
6
Count: 4, enter an integer (from 1 to 10): 
7
Count: 5, enter an integer (from 1 to 10): 
8
Count: 6, enter an integer (from 1 to 10): 
2
Count: 7, enter an integer (from 1 to 10): 
1
Count: 8, enter an integer (from 1 to 10): 
9
Count: 9, enter an integer (from 1 to 10): 
10
Count: 10, enter an integer (from 1 to 10): 
4
The sum of even powered: 204688256
The sum of odd powered: 59421

【讨论】:

    【解决方案2】:
    public class SumOfOddEven {
        private long sumOfOdds;
        private long sumOfEvens;
        private int countOfOdds;
        private int countOfEvens;
    
        public SumOfOddEven() {
            countOfOdds = 1;
            countOfEvens = 10;
            sumOfOdds = 0;
            sumOfEvens = 0;
        }
        public String Run() {
            Scanner in = new Scanner(System.in);
    
            for(int i = 0; i < 10; i++){
                System.out.println("Enter integer number " + i);
                long number = in.nextLong();
    
                if(number % 2 == 0) {
                    for(int j = countOfEvens; j >= 1; j--) {
                        number *= number;
                    }
    
                    sumOfEvens += number; 
                    countOfEvens--;
                }
                else {
                    for(int k = countOfOdds; k >= 1; k--) {
                        number *= number;
                    }
    
                    sumOfOdds += number;
                    countOfOdds++;
                }
            }
    
            in.close();
            return "Sum of odds: " + sumOfOdds + "\nSum of evens: " + sumOfEvens; 
        }
    
    }
    

    然后在主要的:

    public static void main(String[] args) {
        SumOfOddEven temp = new SumOfOddEven();
        System.out.println(temp.Run());
    }
    

    您可以通过简单的条件来检查输入是否有效,以查看输入是否为整数或分配要求检查的任何其他规定。如果该条件为真,则只需让 Run() 再次调用自身并重置计数变量。

    【讨论】:

    • 感谢 devon,目前我遇到以下错误:错误:(16, 59) java: int cannot be dereference on this >>> System.out.println("Enter integer number " + i.toString());
    • 取出那行的.toString()。
    • 让我知道这是否有效。我没有测试就写了这个,所以我认为它应该可以工作,但不确定..
    • 我删除了 System.out.println("Enter integer number" + i.toString());运行程序(输入整数 1 - 10),我得到输出: SumOdds 5 SumEven 0
    • 尝试让 for 循环中的 k 和 j 变量执行 k-- 和 j-- 而不是 k++ 和 j++。
    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 2018-10-16
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多