【问题标题】:Java: Local variable scopeJava:局部变量范围
【发布时间】:2014-03-02 18:58:13
【问题描述】:

我收到一条错误消息,提示编译器找不到我的变量“complexArray”,但我不知道为什么。如何修复我的程序,使其返回从文件中读取的复数数组?

public static Complex[] parseFromFile(String fileName) {
    int numOfComplex = 0;
    try {   
        Scanner sc = new Scanner(new File(fileName));
        String firstLine = sc.nextLine();
        firstLine = firstLine.trim();
        numOfComplex = Integer.parseInt(firstLine);
        Complex[] complexArray = new Complex[numOfComplex];
        for (int i = 0; i < numOfComplex; i++) {
            String nextLine = sc.nextLine();
            nextLine = nextLine.trim();
            complexArray[i] = parseComplex(nextLine);
        }
    }
    catch(Exception e) {
    }
    return complexArray;
}

【问题讨论】:

    标签: java arrays return try-catch


    【解决方案1】:

    您的 complexArray 变量在 try{} 范围内声明。在 try 语句之前声明它。

    复杂[] 复杂数组 = null;

    【讨论】:

    • 当我将它声明为 null 时,它返回为 null。由于某种原因,数组在 try/catch 块内没有改变
    【解决方案2】:

    将 return complexArray 语句放在 try {} 语句中

    public static Complex[] parseFromFile(String fileName) {
    int numOfComplex = 0;
    try {   
        Scanner sc = new Scanner(new File(fileName));
        String firstLine = sc.nextLine();
        firstLine = firstLine.trim();
        numOfComplex = Integer.parseInt(firstLine);
        Complex[] complexArray = new Complex[numOfComplex];
        for (int i = 0; i < numOfComplex; i++) {
            String nextLine = sc.nextLine();
            nextLine = nextLine.trim();
            complexArray[i] = parseComplex(nextLine);
        }
     return complexArray;
    }
    catch(Exception e) {
    }
    

    }

    【讨论】:

    • 这表示我错过了 catch 之后的 return 声明
    • 好的,然后尝试将返回的 complexArray 放在它所在的位置,然后将 Complex[] complexArray = new Complex[numOfComplex];低于 int numOfComplex = 0;
    【解决方案3】:

    从@hemanth 继续

    public static Complex[] parseFromFile(String fileName) {
            int numOfComplex = 0;
            Complex[] complexArray = new Complex[numOfComplex]; // Need to initialize the array
            try {   
                Scanner sc = new Scanner(new File(fileName));
                String firstLine = sc.nextLine();
                firstLine = firstLine.trim();
                numOfComplex = Integer.parseInt(firstLine);
                complexArray = new Complex[numOfComplex];
                for (int i = 0; i < numOfComplex; i++) {
                    String nextLine = sc.nextLine();
                    nextLine = nextLine.trim();
                    complexArray[i] = parseComplex(nextLine);
                    }
                return complexArray;
            } 
            catch(Exception e) {
                System.out.println("Exception was thrown"); // try adding this to see if an exception is thrown.
            }
            return complexArray;
        } //<<<=== scope of `complexArray` ends here
    

    您需要通过创建一个新的 Complex 数组来初始化 complexArray 对象。那是你的问题。

    我认为这可能有效。如果一切顺利,它应该进入 try 子句。如果不是,它将返回大小为 0 的 complexArray。我假设如果发生这种情况,文件有问题,这意味着您需要手动执行某些操作?

    【讨论】:

    • 也不起作用-原因是我必须从正在读取的文件中获取数组的长度,因此我无法在读取之前声明数组的大小从文件中。但是当我在 try/catch 块中做任何事情时,它似乎根本不会改变或影响数组
    • 因为它告诉我在 try/catch 之后我需要一个 return 语句。似乎它甚至没有进入 try 子句。
    • @user3277742:请查看修改后的答案,看看是否有帮助
    • 也不起作用....只返回一个大小为 0 的数组。它没有进入 try 子句,所以它所做的只是初始化一个长度为 0 的数组,然后返回该数组.我告诉你,伙计,我很困惑哈哈
    • 这只是意味着总是抛出异常。我猜是 Scanner 对象......确保你可以读取文件,这就是我之前的意思,如果它返回一个大小为 0 的数组,那么 IO 有问题
    【解决方案4】:

    由于complexArraytry 块中声明,一旦在try 块内执行完成complexArray 超出范围。

          public static Complex[] parseFromFile(String fileName) {
            int numOfComplex = 0;
            try {   
                Scanner sc = new Scanner(new File(fileName));
                String firstLine = sc.nextLine();
                firstLine = firstLine.trim();
                numOfComplex = Integer.parseInt(firstLine);
                Complex[] complexArray = new Complex[numOfComplex];
                for (int i = 0; i < numOfComplex; i++) {
                    String nextLine = sc.nextLine();
                    nextLine = nextLine.trim();
                    complexArray[i] = parseComplex(nextLine);
                }
            } //<<<=== scope of `complexArray` ends here
            catch(Exception e) {
            }
            return complexArray;
        }
    

    试试这个

          public static Complex[] parseFromFile(String fileName) {
            int numOfComplex = 0;
            Complex[] complexArray;
            try {   
                Scanner sc = new Scanner(new File(fileName));
                String firstLine = sc.nextLine();
                firstLine = firstLine.trim();
                numOfComplex = Integer.parseInt(firstLine);
                complexArray = new Complex[numOfComplex];
                for (int i = 0; i < numOfComplex; i++) {
                    String nextLine = sc.nextLine();
                    nextLine = nextLine.trim();
                    complexArray[i] = parseComplex(nextLine);
                }
            } 
            catch(Exception e) {
            }
            return complexArray;
        } //<<<=== scope of `complexArray` ends here
    

    【讨论】:

    • 它说变量可能没有被初始化---我认为发生的事情是它没有将值放入数组中,我不知道为什么
    猜你喜欢
    • 2017-02-17
    • 2012-05-27
    • 2013-10-14
    • 2010-11-26
    • 2016-11-13
    • 2013-05-10
    • 2014-07-14
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多