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

标签 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. 我切换了^ 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 block ,这些 block 在输入整数时会中断,因为您之前的代码会引发异常,并且如果您输入格式正确的整数以外的内容(例如字母或小数值),则会停止)。由您决定保留或删除它们。
  7. 顺便说一下,初始化xn0现在是多余的,因为您的代码保证立即为它们分配另一个值。

这是更新后的代码。

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

关于java - 我在这个算法上做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048105/

相关文章:

java - 选择适用于 Java 的响应式 Web 框架

java - 在哪里可以找到 ColdFusion Administrator 中列出的事件网关的 Java 类文件?

java - 单例、枚举和匿名内部类

java - 按类型拦截 AspectJ java

java - 无限期地等待可能永远不会到达的消息

java - 如何为每个 ListView 项目使用不同的背景颜色

java - 如何使用 Guava Multimap 的 replaceValues 方法?

java - 不允许使用文件未找到异常,但这是必要的

java - 无法使用 jasypt 解密 : Illegal Block Size Exception

java - 使用来自 let's encrypt 的 SSL 证书 Play Framework