我在这个算法上做错了什么?

时间:2017-02-05 02:59:14

标签: java

我已经坚持使用这段代码几个小时了。 总和为S = 1-x + x^2 - x^3 + x^4 我们要求XN的起始值为i = 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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

所以我在你的代码中解决了一些问题:

  1. 我为Math.pow切换了^运算符(正如@Nick Bell指出的那样,是一个按位异或)。
  2. 我修改了变量xn的拼写。在Java中,约定是给出以小写字母开头的变量名称。大写(XN)保留用于常量(标记为final的字段)和类(与对象相对)。请注意,这只是一个约定,并且代码可以正常工作。它只是帮助阅读代码。
  3. 您的奇数/偶数检查已被反转:偶数的x % 2 == 0true
  4. 您将奇数/偶数检查反转的原因可能是sum上的两个操作被反转。与问题第一段中的问题描述相比,您会看到出错的地方。
  5. if i < N检查是多余的。你真的想把计算限制在i < N,你应该直接在你的第一个for循环中指定它。
  6. 我添加了两个带有无限循环的try / catch块,这些循环在输入整数时会中断,因为前面的代码抛出了异常并且如果输入的内容不是格式良好的整数(例如字母或小数值),则会停止)。由你来保留或删除它们。
  7. 顺便说一句,将xn初始化为0现在是多余的,因为您的代码可以保证立即为其分配另一个值。
  8. 这是更新的代码。

    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);
        }
    }