Euler项目,问题2-Java
我是一个相对较新的java程序员,一天中的大部分时间我都在修补这个程序,但我仍然被卡住了;我希望你能帮我 因此,该计划应满足以下要求: 斐波那契方程中的每个新项 序列是通过添加 前两届。从1开始 第二,前10个条款为: 1、2、3、5、8、13、21、34、55、89 通过考虑 其值不为零的斐波那契序列 超过四百万,找到 偶数值项 这是我的代码:Euler项目,问题2-Java,java,Java,我是一个相对较新的java程序员,一天中的大部分时间我都在修补这个程序,但我仍然被卡住了;我希望你能帮我 因此,该计划应满足以下要求: 斐波那契方程中的每个新项 序列是通过添加 前两届。从1开始 第二,前10个条款为: 1、2、3、5、8、13、21、34、55、89 通过考虑 其值不为零的斐波那契序列 超过四百万,找到 偶数值项 这是我的代码: //Generates Fibonacci sequence while (fibNum < 144) {
//Generates Fibonacci sequence
while (fibNum < 144)
{
int lastValue = (Integer) fibList.get(fibList.size()-1);
int secondToLastValue = (Integer) fibList.get(fibList.size()-2);
fibNum = secondToLastValue + lastValue;
if (fibNum < 144)
{
fibList.add(fibNum);
}
//Picks out the even numbers from limitFibList
for (int i = 0; i < fibList.size(); i++)
{
if ((Integer) fibList.get(i) % 2 == 0)
{
evenNumsFibList.add(fibList.get(i));
}
}
//Sums up the total value of the numbers in the evenNumsFibList
for (int i = 0; i < evenNumsFibList.size(); i++)
{
sum += (Integer) evenNumsFibList.get(i);
}
显然,我的while循环导致了我的问题,但我不知道如何修复它
非常感谢您的帮助
Haque看起来您缺少
while
循环中的右括号。因此的另一个在其中运行
因此:
while(fibNum<144)
{
int lastValue=(整数)fibList.get(fibList.size()-1);
int secondToLastValue=(整数)fibList.get(fibList.size()-2);
fibNum=secondToLastValue+lastValue;
如果(fibNum<144)
{
fibList.add(fibNum);
}
}
//从列表中选择偶数
对于(int i=0;i
看起来您在循环时缺少了上的右括号。因此,
的其他在循环中运行
因此:
while(fibNum<144)
{
int lastValue=(整数)fibList.get(fibList.size()-1);
int secondToLastValue=(整数)fibList.get(fibList.size()-2);
fibNum=secondToLastValue+lastValue;
如果(fibNum<144)
{
fibList.add(fibNum);
}
}
//从列表中选择偶数
对于(int i=0;i
问题在于:
for (int i = 0; i < fibList.size(); i++)
{
if ((Integer) fibList.get(i) % 2 == 0)
{
evenNumsFibList.add(fibList.get(i)); <-- HERE
}
}
for(int i=0;i
for (int i = 0; i < fibList.size(); i++)
{
if ((Integer) fibList.get(i) % 2 == 0)
{
evenNumsFibList.add(fibList.get(i)); <-- HERE
}
}
for(int i=0;i evenNumsFibList.add(fibList.get(i));我遗漏了什么吗?你为什么需要创建列表?你只需要一个偶数的和?对吗?如果我理解正确,你可以在10行代码中得到和…我没有Java IDE opend,所以我会给你Pythone代码。如果你需要的话,我会把它转换成Java
def fib(n=4000001): # write Fibonacci series up to n
r = 0
a, b = 0, 1
while b < n:
if not b%2 :
print(b, end=' ')
r += b
a, b = b, a+b
return r
OUTPUT:
2 8 34 144 610 2584 10946 46368 196418 832040 3524578
sum = 4613732
def fib(n=4000001):#将Fibonacci级数写到n
r=0
a、 b=0,1
而b
我遗漏了什么吗?为什么需要创建列表?你只需要一个偶数的和?对吗?如果我理解正确,你可以在10行代码中得到和…我没有Java IDE opend,所以我会给你Pythone代码。如果这是你需要的,我会把它转换成Java
def fib(n=4000001): # write Fibonacci series up to n
r = 0
a, b = 0, 1
while b < n:
if not b%2 :
print(b, end=' ')
r += b
a, b = b, a+b
return r
OUTPUT:
2 8 34 144 610 2584 10946 46368 196418 832040 3524578
sum = 4613732
def fib(n=4000001):#将Fibonacci级数写到n
r=0
a、 b=0,1
而b
如果仔细查看实际需要的斐波那契序列中的数字(只有偶数需要求和),您将看到一种模式:
0 1 1 2 3 5 8 13 21 34 55 89 144 ...
- O O E O O E O O E O O E
请注意,从0开始的每三个数字都是偶数。因此,如果计算每三个斐波那契数,则可以消除对均匀性的任何检查。再次查看序列,您可以看到如果k
是您正在查看的当前偶数斐波那契数,j
是前一个,下一个偶数斐波那契数分子量n
可通过以下方式获得:
n = 4k + j
因此,在Java中,您可以尝试以下内容:
int j = 0;
int k = 2;
int sum = j+k;
while (k < LIMIT) {
int tmp = 4*k + j;
sum = sum + tmp;
j = k;
k = tmp;
}
intj=0;
int k=2;
整数和=j+k;
while(k
如果仔细查看实际需要的斐波那契序列中的数字(只有偶数需要求和),您将看到一种模式:
0 1 1 2 3 5 8 13 21 34 55 89 144 ...
- O O E O O E O O E O O E
请注意,从0开始的每三个数字都是偶数。因此,如果计算每三个斐波那契数,则可以消除对均匀性的任何检查。再次查看序列,您可以看到如果k
是您正在查看的当前偶数斐波那契数,j
是前一个,下一个偶数斐波那契数分子量n
可通过以下方式获得:
n = 4k + j
因此,在Java中,您可以尝试以下内容:
int j = 0;
int k = 2;
int sum = j+k;
while (k < LIMIT) {
int tmp = 4*k + j;
sum = sum + tmp;
j = k;
k = tmp;
}
intj=0;
int k=2;
整数和=j+k;
while(k
公共类Euler002{
int counter = 0;
public int getCounter () {
return counter;
}
public int getFibTotal () {
final int UPPER_LIMIT = 4000000;
int fib1 = 0;
int fib2 = 1;
int newFib = fib1 + fib2;
int total = 0;
while (newFib < UPPER_LIMIT) {
counter++;
fib1 = fib2;
fib2 = newFib;
newFib = fib1 + fib2;
if ((newFib % 2) == 0) {
total += newFib;
}
}
return total;
}
/**
* @param args
*/
public static void main(String[] args) {
Euler002 euler002 = new Euler002();
int total = euler002.getFibTotal();
System.out.println(" Counter = " + euler002.getCounter() + " And Fib Total is " + total);
}
int计数器=0;
公共int getCounter(){
返回计数器;
}
公共整数getFibTotal(){
最终整数上限=4000000;
int fib1=0;
int fib2=1;
int newFib=fib1+fib2;
int-total=0;
while(newFib<上限){
计数器++;
fib1=fib2;
fib2=newFib;
newFib=fib1+fib2;
如果((newFib%2)==0){
总+=新纤维蛋白;
}
}
返回总数;
}
/**
*@param args
*/
公共静态void main(字符串[]args){
Euler002 Euler002=新的Euler002();
int-total=euler002.getFibTotal();
System.out.println(“Counter=“+euler002.getCounter()+”和Fib总计为“+Total”);
}
}公共类Euler002{
int counter = 0;
public int getCounter () {
return counter;
}
public int getFibTotal () {
final int UPPER_LIMIT = 4000000;
int fib1 = 0;
int fib2 = 1;
int newFib = fib1 + fib2;
int total = 0;
while (newFib < UPPER_LIMIT) {
counter++;
fib1 = fib2;
fib2 = newFib;
newFib = fib1 + fib2;
if ((newFib % 2) == 0) {
total += newFib;
}
}
return total;
}
/**
* @param args
*/
public static void main(String[] args) {
Euler002 euler002 = new Euler002();
int total = euler002.getFibTotal();
System.out.println(" Counter = " + euler002.getCounter() + " And Fib Total is " + total);
}
int计数器=0;
公共int getCounter(){
返回计数器;
}
公共整数getFibTotal(){
最终整数上限=4000000;
int fib1=0;
int fib2=1;
int newFib=fib1+fib2;
int-total=0;
while(newFib