Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java方法返回类型混淆_Java_Return - Fatal编程技术网

java方法返回类型混淆

java方法返回类型混淆,java,return,Java,Return,我试图从一个函数返回一个2D矩阵。Eclipse抱怨函数的返回类型 import java.io.*; import java.util.Arrays; import java.util.List; import com.opencsv.CSVReader; public class myClass { private static String inFile = "myfile.csv"; private String[][] readCsv() { Fi

我试图从一个函数返回一个2D矩阵。Eclipse抱怨函数的返回类型

import java.io.*;
import java.util.Arrays;
import java.util.List;
import com.opencsv.CSVReader;

public class myClass {

    private static String inFile = "myfile.csv";

    private String[][] readCsv() {
        File file1 = new File(inFile);
        if (file1.exists()) {
            System.out.println("File " + inFile + " exists. length : " + inFile.length());
        } else {
            System.out.println("File " + inFile + " does not exist!");
        }

        try {
            // Read all
            CSVReader csvReader = new CSVReader(new FileReader(new File(inFile)));
            List<String[]> list = csvReader.readAll();

            // Convert to 2D array
            String[][] dataArr = new String[list.size()][];
            dataArr = list.toArray(dataArr);

            return dataArr;
        } catch (Exception ex) {
            // Do something with mistake or ignore
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        myClass mc = new myClass();
        String[][] csvContents = mc.readCsv();

        for (int k = 0; k < 10; k++) {
            System.out.println(Arrays.toString(csvContents[k]));
        }
    }

}
import java.io.*;
导入java.util.array;
导入java.util.List;
导入com.opencsv.CSVReader;
公共类myClass{
私有静态字符串infle=“myfile.csv”;
私有字符串[][]readCsv(){
文件file1=新文件(infle);
if(file1.exists()){
System.out.println(“文件”+infle+”存在。长度:“+infle.length());
}否则{
System.out.println(“文件“+infle+”不存在!”);
}
试一试{
//通读
CSVReader CSVReader=新CSVReader(新文件读取器(新文件(填充));
List List=csvReader.readAll();
//转换为二维阵列
字符串[][]dataArr=新字符串[list.size()][];
dataArr=list.toArray(dataArr);
返回数据arr;
}捕获(例外情况除外){
//做错事或忽略
例如printStackTrace();
}
}
公共静态void main(字符串[]args){
myClass mc=新的myClass();
字符串[][]csvContents=mc.readCsv();
对于(int k=0;k<10;k++){
System.out.println(Arrays.toString(csvContents[k]);
}
}
}
eclipse告诉我的错误是
此方法必须返回String[][]
类型的结果。返回的值,
dataArr
的类型为
String[][]
&方法
readCsv
被指示返回
String[][]


我不太清楚错误在哪里。

如果try块抛出异常,您必须返回一些内容:

public String[][] myMethod() {
    String[][] arr = new String[1][];
    try {
        arr = methodThatCanThrowException(); // If this method throws an exception
        return arr;                          // this return will not execute
    } catch (Exception ignored) {}

    return arr;                              // Return something after the try/catch block
}

如何处理此问题取决于您,您可以返回一些默认值,也可以返回
null

如果try块引发异常,您必须返回一些内容:

public String[][] myMethod() {
    String[][] arr = new String[1][];
    try {
        arr = methodThatCanThrowException(); // If this method throws an exception
        return arr;                          // this return will not execute
    } catch (Exception ignored) {}

    return arr;                              // Return something after the try/catch block
}

如何处理这一问题取决于您,您可以返回一些默认值,或者在
readCsv
中捕获异常时,您不返回任何内容。你需要在这里归还一些东西

catch (Exception ex) {
        // Do something with mistake or ignore
        ex.printStackTrace();
        return SOMETHING;
    }

如果在
readCsv
中捕获异常,则不会返回任何内容。你需要在这里归还一些东西

catch (Exception ex) {
        // Do something with mistake or ignore
        ex.printStackTrace();
        return SOMETHING;
    }

当捕捉到异常且代码函数继续时,没有返回值

当捕捉到异常且代码函数继续时,没有返回值

该方法必须在每个可能的分支中返回一个
字符串[][]
。在这里,您只能从
try
返回它-如果它没有成功完成并且抛出异常,那么
catch
将在不返回任何内容的情况下完成,从而返回错误。您可以像@Marv建议的那样,在try-catch块之后
返回
,但是,正确的Java方法是只允许从方法中抛出异常,而不是捕获异常:

// should probably throw something more specific
private String[][] readCsv() throws Exception { 
    // Read all
    CSVReader csvReader = new CSVReader(new FileReader(new File(inFile)));
    List<String[]> list = csvReader.readAll();

    // Convert to 2D array
    String[][] dataArr = new String[list.size()][];
    dataArr = list.toArray(dataArr);

    return dataArr;
}
//可能会抛出更具体的内容
私有字符串[][]readCsv()引发异常{
//通读
CSVReader CSVReader=新CSVReader(新文件读取器(新文件(填充));
List List=csvReader.readAll();
//转换为二维阵列
字符串[][]dataArr=新字符串[list.size()][];
dataArr=list.toArray(dataArr);
返回数据arr;
}

该方法必须在每个可能的分支中返回一个
字符串[]
。在这里,您只能从
try
返回它-如果它没有成功完成并且抛出异常,那么
catch
将在不返回任何内容的情况下完成,从而返回错误。您可以像@Marv建议的那样,在try-catch块之后
返回
,但是,正确的Java方法是只允许从方法中抛出异常,而不是捕获异常:

// should probably throw something more specific
private String[][] readCsv() throws Exception { 
    // Read all
    CSVReader csvReader = new CSVReader(new FileReader(new File(inFile)));
    List<String[]> list = csvReader.readAll();

    // Convert to 2D array
    String[][] dataArr = new String[list.size()][];
    dataArr = list.toArray(dataArr);

    return dataArr;
}
//可能会抛出更具体的内容
私有字符串[][]readCsv()引发异常{
//通读
CSVReader CSVReader=新CSVReader(新文件读取器(新文件(填充));
List List=csvReader.readAll();
//转换为二维阵列
字符串[][]dataArr=新字符串[list.size()][];
dataArr=list.toArray(dataArr);
返回数据arr;
}

抛出异常时,您不会返回任何内容。在方法摘要中声明此方法中可能发生的异常可能会有潜在的好处。这样,您就不需要try-catch,也不需要返回虚假的值。当抛出异常时,您不会返回任何内容。在方法摘要中声明此方法中可能发生的异常可能会有潜在的好处。这样,你就不需要试捕,也不需要返回一个伪造的值。谢谢你,MarveExcellent。谢谢Marv1)编译器错误发生,因为您必须明确
返回数据arr来自每个可能的代码路径。2) 一种选择是
返回null。另一种方法是初始化
字符串[][]dataArr=null在try/catch块之外。3) 可以说,最好的解决方案是允许readCsv抛出异常,并让您的高级代码处理它。@paulsm4这是针对我还是针对OP的?没有最佳解决方案,这取决于OP希望该方法如何工作。1)编译器错误发生,因为您必须明确地
返回dataArr来自每个可能的代码路径。2) 一种选择是
返回null。另一种方法是初始化
字符串[][]dataArr=null在try/catch块之外。3) 可以说,最好的解决方案是允许readCsv抛出异常,并让您的高级代码处理它。@paulsm4这是针对我还是针对OP的?没有最佳解决方案,这取决于OP希望该方法如何工作。