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

  • 本文关键字:错了 算法 java
  • 更新时间 :
  • 英文 :


我已经在这个代码上呆了几个小时了。总和为S = 1-x + x^2 - x^3 + x^4
我们要求XN的起始值为i = 0。只要上一个指数(i)是奇数,我们就加上x^i如果前面的指数是偶数,我们减去CCD_ 7
我把它们放在一个循环中,但我似乎拿不出正确的和。有人能告诉我我做错了什么吗?非常感谢。

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 == 0是偶数的true
  4. 反转奇偶校验的原因可能是sum上的两个操作被反转了。与问题第一段中对问题的描述进行比较,你会发现哪里出了问题
  5. if i < N检查是多余的。如果您真的想将计算限制在i < N,那么应该在第一个for循环中直接指定它
  6. 我添加了两个带有无限循环的try/catch块,这些块在输入整数时会中断,因为您以前的代码会引发异常,如果您输入的不是格式良好的整数(如字母或十进制值),则会停止。由您保留或删除它们
  7. 顺便说一下,将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);
}
}

最新更新