我已经坚持使用这段代码几个小时了。
总和为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);
}
}
}
答案 0 :(得分:1)
所以我在你的代码中解决了一些问题:
Math.pow
切换了^
运算符(正如@Nick Bell指出的那样,是一个按位异或)。x
和n
的拼写。在Java中,约定是给出以小写字母开头的变量名称。大写(X
和N
)保留用于常量(标记为final
的字段)和类(与对象相对)。请注意,这只是一个约定,并且代码可以正常工作。它只是帮助阅读代码。x % 2 == 0
为true
。sum
上的两个操作被反转。与问题第一段中的问题描述相比,您会看到出错的地方。if i < N
检查是多余的。你真的想把计算限制在i < N
,你应该直接在你的第一个for循环中指定它。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);
}
}