我要在整数threadarray数组中指定指定范围的随机数。
在这些代码中,给出了三个任务。第一个任务和第二个任务同时开始执行线程,在前两个任务完成后,只有第三个任务开始执行。如果这些情况正确,那么test()方法返回true。
public static final int[]threadarray=新int[300];如何使用task1 task2和task3类将随机数添加到这些数组中。
输入:
80
130
90
输出:
是的
import java.util.Scanner;
class Task1 extends Thread
{
static int a = 0;
static int beg = 0;
public void run()
{
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Task2 extends Thread
{
static int a = 0;
static int beg = 0;
@Override
public void run()
{
// TODO Auto-generated method stub
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
}
}
}
class Task3 extends Thread
{
static int a = 0;
static int beg = 0;
public void run()
{
// TODO Auto-generated method stub
for(int i=a;i<=beg;i++)
{
Solution.threadArray[i] = i;
}
}
}
public class Solution
{
public static final int[] threadArray = new int[300];
public static volatile String i = 0+"";
public boolean test() throws InterruptedException
{
Task1 task1 = new Task1();
Task2 task2 = new Task2();
Task3 task3 = new Task3();
Thread task2Thread = new Thread(task2);
Thread task3Thread = new Thread(task3);
task1.start();
task2Thread.start();
task1.join();
task2Thread.join();
task3Thread.start();
int first = Task1.a+Task2.a;
int containsSecondThread = Task1.a;
String oneAndTwo = "";
String sizeOfTask1 = "";
for(int i=0;i<first;i++)
{
oneAndTwo += threadArray[i]+" ";
}
for(int i=0;i<containsSecondThread;i++)
{
sizeOfTask1 += threadArray[i]+" ";
}
int begOfTask3 = Task3.beg;
String checkingString = "";
for(int i=begOfTask3;i<threadArray.length;i++)
{
checkingString += i + " ";
}
String task3String = "";
for(int j = begOfTask3;j<threadArray.length;j++)
{
task3String += threadArray[j]+" ";
}
if((!oneAndTwo.contains(begOfTask3+"") && sizeOfTask1.contains(Task2.beg+"")) || task3String.equals(checkingString))
{
return true;
}
return false;
}
public static void main(String[] args) throws InterruptedException
{
Scanner sc= new Scanner(System.in);
Solution solution = new Solution();
int one = sc.nextInt();
Task1.a = one;
Task1.beg = 0;
int two = sc.nextInt();
Task2.a = two;
Task2.beg = one;
int three = sc.nextInt();
Task3.a = three;
Task3.beg = one+two;
System.out.print(solution.test());
}
}
1条答案
按热度按时间tktrz96b1#
首先,一些关于代码的观察:不要在类中使用静态变量(例如。,
Task1
,Task2
,和Task3
)扩展了课堂Thread
(为了理解为什么静态变量被认为是邪恶的?):使用非静态final字段,并通过构造函数初始化它们:
调整
main
相应的方法:然后将与任务相关的对象作为的参数传递给
test
方法:对于字符串的串联使用
StringBuilder
:这看起来不对:
通过观察
run
方法来自Task1
,这意味着,如果Task1.a
不是负数Task1
不会做任何工作。使用
threads
要生成数组的随机值:int[] threadArray = new int[300];
您可以从提取方法开始,根据以下公式生成这些随机值:此公式生成一个介于
low
以及high
.相应地调整任务:
确保向线程传递有关要生成的随机值范围的信息(即
low
以及high
参数),以及对将用这些随机值填充的数组的引用(即数组)int[] threadArray
) . 还要确保分割迭代int[] threadArray
在线程之间。因此,每个线程应该生成一个随机值块。这种分配的一个例子是:您可以使其更健壮,将数组长度除以线程数,并相应地在线程之间分配功。
我本可以给你提供完整的解决方案,但我觉得如果我给你一些建议,这样你就可以自己做了。