java列表的数组索引越界异常错误
我正在尝试将2d数组放入2d列表中。我正在构建一个google protobuf。我不明白我为什么抛出异常。我在stack上尝试了多个建议,但没有一个能提供帮助 这是我的客户端代码:java列表的数组索引越界异常错误,java,arrays,exception,arraylist,protocol-buffers,Java,Arrays,Exception,Arraylist,Protocol Buffers,我正在尝试将2d数组放入2d列表中。我正在构建一个google protobuf。我不明白我为什么抛出异常。我在stack上尝试了多个建议,但没有一个能提供帮助 这是我的客户端代码: public class google_cl extends Thread { static Array createArray() throws IOException{ Array.Builder array = Array.newBuilder(); double[][]array
public class google_cl extends Thread {
static Array createArray() throws IOException{
Array.Builder array = Array.newBuilder();
double[][]arrays = new double[15][15000];
for(int i=1; i< 15; i++){
for(int j=1; j<15000;j++){
arrays[i][j]=Math.random()*100;
}
}
for(int i=1;i<15;i++){
for(int j=1;j<15000;j++){
array = Array.newBuilder().setArrays(i, arrays[1][j]);
}
}
//System.out.println(array);
// Make connection and initialize streams
Socket socket;
try {
socket = new Socket("localhost", 9898);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
ObjectOutputStream os = new ObjectOutputStream(outputStream);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws IOException {
Average.Builder avger = Average.newBuilder();
//avger.mergeFrom();
try{
avger.mergeFrom(new FileInputStream(args[0]));
}
catch (IOException e) {
System.out.println(args[0] + ": File not found. Creating a new file.");
}
FileOutputStream output = new FileOutputStream(args[0]);// This is where my error occurs.
avger.build().writeTo(output);
output.close();
}
}
这是我的stacktrace:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at cisc_434_google_protocol.google_cl.main(google_cl.java:82)
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:0在cisc_434_google_protocol.google_cl.main(google_cl.java:82) 表示在类的第82行,您试图访问数组的第一项,但该数组为空 如果这是第82行:
Average averag = Average.parseFrom(new FileInputStream(args[0]));
这意味着
args
为空。换句话说,您没有向程序传递任何参数。您没有将args[0]中的文件名作为参数传递。您在错误的位置进行了检查:创建文件后,您正在使用args.length进行检查。更改代码语句的顺序,以便先检查args.length,然后创建文件
试试这个代码
if ( args.length != 1){
System.out.println("Exiting program. Usage: java google_cl fileName");
System.exit(-1);
}
google_sr p = new google_sr();
Average averag = Average.parseFrom(new FileInputStream(args[0]));
average(averag);
将stacktracepost张贴到控制台输出上,这样问题就清楚了刚才所做的,@sanjaysinghrawat看起来该尝试有一个未捕获的索引越界异常,这就是错误出现在它之后的原因。我养成的一个好习惯是,在对参数进行任何操作之前,先对args长度进行if检查。如果您正在使用任何IDE,如eclipse,请签出-确切地说。。正如@CrakC所提到的。。您必须传递命令行参数,因为您似乎试图获取命令行数据,但没有传递它。
Average averag = Average.parseFrom(new FileInputStream(args[0]));
if ( args.length != 1){
System.out.println("Exiting program. Usage: java google_cl fileName");
System.exit(-1);
}
google_sr p = new google_sr();
Average averag = Average.parseFrom(new FileInputStream(args[0]));
average(averag);