我已经在这段代码上停留了几个小时了。
总和为S = 1-x + x^2 - x^3 + x^4
。
我们要求 X
和 N
,起始值为 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);
}
}
}
最佳答案
所以我修复了您的代码中的一些问题:
- 我切换了
^
Math.pow
的运算符(正如@Nick Bell 指出的那样,是按位异或) . - 我修正了你的变量的拼写
x
和n
。在 Java 中,约定以小写字母开头的变量名称。大写字母(X
和N
)保留用于常量(标记为final
的字段)和类(而不是对象)。请注意,这只是一个约定,代码在两种情况下都可以正常工作。它只是有助于阅读代码。 - 您的奇/偶检查已颠倒:
x % 2 == 0
是true
对于偶数。 - 您反转奇/偶检查的原因可能是
sum
上的两个操作。被颠倒了。与问题第一段中的问题描述进行比较,您就会发现哪里出了问题。 if i < N
检查是多余的。如果您确实想将计算限制为i < N
,您应该直接在第一个 for 循环中指定它。- 我添加了两个带有无限循环的 try/catch block ,这些 block 在输入整数时会中断,因为您之前的代码会引发异常,并且如果您输入格式正确的整数以外的内容(例如字母或小数值),则会停止)。由您决定保留或删除它们。
- 顺便说一下,初始化
x
和n
至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);
}
}
关于java - 我在这个算法上做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42048105/