我已经在此代码上停留了两个小时。
总和为S = 1-x + x^2 - x^3 + x^4
我们要求起始值为XNi = 0
每当前一个指数(i)为奇数时,我们就会添加x^i,并且
如果先前的指数是偶数,我们减去x^i
我把它们放在一个循环上,但是我似乎无法正确地得到总和。
谁能告诉我我在做什么错?
谢谢!

import java.util.Scanner;

public class hw1 {
    public static void main(String[] args) {
        try (Scanner scan = new Scanner(System.in)) {
            System.out.println("Sum = 1^0-x^1+x^2-x^3..+x^n");
            System.out.println("Enter number X");
            int X = scan.nextInt();
            System.out.println("Enter number N");
            int N = scan.nextInt();
            int sum = 0;
            for (int i = 0; i <= N; i++) {
                if (i < N) {
                    if (i % 2 != 0)    // if I is even
                    {
                        sum = sum - (X ^ i);
                    } else    // if I is odd
                    {
                        sum = sum + (X ^ i);
                    }
                }
            }
            System.out.println("Z is " + sum);
        }
    }
}

最佳答案

因此,我在您的代码中修复了一些问题:


我为^切换了Math.pow运算符(如@Nick Bell所指出的,它是按位异或)。
我修复了变量xn的拼写。在Java中,约定是给变量名称以小写字母开头。大写字母(XN)保留用于常量(标记为final的字段)和类(与对象相对)。请注意,这只是一个约定,并且代码在两种情况下都可以正常工作。它只是有助于阅读代码。
您的奇/偶校验被倒置:对于偶数,x % 2 == 0true
您反转奇/偶校验的原因可能是sum上的两个操作被反转了。与问题第一段中问题的描述进行比较,您会发现问题出在哪里。
if i < N检查是多余的。如果您确实想将计算限制为i < N,则应在第一个for循环中直接指定它。
我添加了两个带有无限循环的try / catch块,这些循环在输入整数时会中断,因为您先前的代码引发了异常,并且如果您输入了格式不正确的整数(例如字母或十进制值)以外的其他内容,则会停止。由您决定保留还是删除它们。
顺便说一下,将xn初始化为0现在是多余的,因为可以确保您的代码立即为它们分配另一个值。


这是更新的代码。

public static void main(String[] args) {
    try (Scanner scan = new Scanner(System.in)) {
        System.out.println("Sum = 1^0-x^1+x^2-x^3..+x^n");
        System.out.println("Enter number X");
        int x = 0;
        while (true) {
            try {
                x = Integer.parseInt(scan.nextLine());
                break;
            } catch (NumberFormatException e) {
                System.out.println("Enter an integer.");
            }
        }
        System.out.println("Enter number N");
        int n = 0;
        while (true) {
            try {
                n = Integer.parseInt(scan.nextLine());
                break;
            } catch (NumberFormatException e) {
                System.out.println("Enter an integer.");
            }
        }
        double sum = 0;
        for (int i = 0; i <= n; i++) {
            if (i % 2 == 0)    // if I is even
                sum = sum + Math.pow(x, i);
            else    // if I is odd
                sum = sum - Math.pow(x, i);
        }
        System.out.println("Z is " + sum);
    }
}

09-27 00:29
查看更多