gpt4 book ai didi

java - 我在线程 "Thread-0"java.lang.ArrayIndexOutOfBoundsException : 0 at Fib. run(fibThread.java:52) 中遇到异常

转载 作者:行者123 更新时间:2023-12-01 11:06:10 25 4
gpt4 key购买 nike

import java.util.Scanner;
public class fibThread {
@SuppressWarnings("resource")

public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner fib = new Scanner(System.in);

System.out.print("Enter the Length of the Fibonacci Series :");

int num = fib.nextInt();

Runnable r = new Fib("Result", num);
new Thread(r).start();

try{
Thread.sleep(10000);
}

catch (InterruptedException e) {
System.out.println("Thread interrupted.");
}

int[] result =((Fib) r).getResult();
System.out.print("The Fibonacci Series is :" + result);

}
}
class Fib implements Runnable{
private int num;
int f0=0, f1=1,fn=0;

int arr[] = new int[num];

public Fib(String string, int num) {
// TODO Auto-generated constructor stub
this.num = num;
}

@Override
public void run() {
for(int i=0; i<num; i++){
fn = f0 + f1;
f0 = f1;
f1 = fn;
arr[i] = fn;
}
}

public int[] getResult(){

return arr;
}
}

有人给我一个问题,我写了上面的代码

编写一个生成斐波那契数列的多线程程序。该程序应按如下方式工作:在命令行上,用户将输入程序要生成的斐波那契数的数量。然后,程序将创建一个单独的线程来生成斐波那契数,并将序列放置在可以由线程共享的数据中(数组可能是最方便的数据结构)。当线程执行完毕后,父线程会输出子线程生成的序列。

请帮我解决这个问题......

最佳答案

原因

您会收到 ArrayIndexOutOfBoundsException,因为在声明 arr 时,num 被初始化为 0

int num; // <-- 0
int arr[] = new int[num]; // <-- int[0]
public Fib(String string, int num) {
// TODO Auto-generated constructor stub
this.num = num;
}

修复它

您可以将数组声明移动到构造函数中,例如

int num;
int arr[];
public Fib(String string, int num) {
this.num = num;
this.arr = new int[num];
}

你的作业

您需要共享arr。我认为您应该使用 static 字段并进行同步。通常使用 Binet's formula 生成斐波那契数列更容易。您的作业似乎是创建一个多线程 Iterative Memoized version .

关于java - 我在线程 "Thread-0"java.lang.ArrayIndexOutOfBoundsException : 0 at Fib. run(fibThread.java:52) 中遇到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32925295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com