所以我正在编写一个简单的线程来将两个向量一起添加,它需要2个命令行参数:向量长度和线程数。根据我的理解,该程序应该接受这两个参数,并根据它们添加向量,根据线程数和向量长度显示性能。这是我被困的地方。到目前为止,我已经编写了基本代码,使用数组将两个向量相加并创建线程,显示时间但我无法使用命令行参数实现它。这是我到目前为止所做的。
public class Addition
{
public static void main(String args[])
{
int NoOfThreads = Integer.parseInt(args[0]);
VectorLength = Integer.parseInt(args[1]);
System.out.println("Start time: " + System.nanoTime());//print start time
Thread v1 = new Vector();
Thread v2 = new Vector();
Thread vsum = new Vector();
//start all threads
v1.start();
v2.start();
vsum.start();
//vsum2.start();
System.out.println("End time: " + System.nanoTime());//print end time
}
}
public class Vector extends Thread
{
//create vectors and assign them arbitrary values
int v1[] = {12,13,14,15,16,17,18};
int v2[] = {15,19,20,22,24,26,28};
//initialise the vector sums to zero
int vsum = 0;
public void run()
{
//loop to add up the elements of the first vector
if(Integer.parseInt(args[0])> 0 )
{
for(int i = 0; i < v1.length; i++)
{
for(int j=0; j<v2.length; j++)
{
vsum = v1[i]+ v2[j];
System.out.println("Current total of vector 1: " + vsum);
try
{
System.out.println(System.nanoTime());
Thread.sleep(100);
}
catch (InterruptedException e)
{}
}//for
}
}
}
}
答案 0 :(得分:0)
您无法在args
课程之外使用main
请不要使用Vector
,因为它是ArrayList
的实现
您可以做的是将成员变量添加到thread
类int NoOfThreads
并在构建thread class
时设置它并在run()
中使用它。
答案 1 :(得分:0)
一些注意事项:
main(..)
中,您没有正确等待线程
终止。 “结束时间:...”将在您之后立即打印
启动线程。使用Thread.join()
。vectorLength
未声明,args
未知范围在哪里
它已被使用等。)答案 2 :(得分:0)
我在这里看到两个编译问题。
首先,未定义VectorLength
的类型。我认为它应该是int VectorLength
。
其次,您正试图访问args
类中的Vector
引用,该引用似乎不可用。
如果要在args
类中使用Vector
,可以将其作为参数传递给Vector
构造函数并将其存储为字段。像这样:
public Vector(String[] args) {
this.args = args;
}
然后,您应该从Addition
类中使用此重载的构造函数:
Thread v1 = new Vector(args);
Thread v2 = new Vector(args);
答案 3 :(得分:0)
将类创建为Vector不会有问题,因为Vector不是Java中的保留关键字,因为您没有使用&lt;&gt; - &gt;&lt;&gt;的Vector类。这不会是个问题。
我能看到的唯一问题是这段代码
int NoOfThreads = Integer.parseInt(args[0]);
VectorLength = Integer.parseInt(args[1]);
您正在尝试同时初始化两个变量NoOfThreads和VectorLength但是用分号结束了两者之间的语句。
int NoOfThreads = Integer.parseInt(args[0])**,**
VectorLength = Integer.parseInt(args[1]);
注意以逗号代替的逗号。
其次,您正尝试在Vector类的run方法中访问args [0],但args数组的范围在Addition的主方法中。
if(Integer.parseInt(args[0])> 0 )
尝试自己解决这两个问题。一切顺利。
答案 4 :(得分:0)
代码中有太多东西坏了。 这里很少。
我建议在开始这项任务之前先进行更简单的编程练习。