当前位置: 首页 > 知识库问答 >
问题:

变量可能尚未初始化...如何增加范围?[重复]

喻珂
2023-03-14

我一直收到一个错误:

error: variable aryResponse might not have been initialized
                if(answers.charAt(i) == aryResponse[i].charAt(i))

我想这是因为我在while循环中初始化变量。但是我不知道如何解决这个问题?

当我需要它初始化为循环给定的值时,如何增加变量的范围?

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

class ExamAnalysis
{
    public static void main(String[] args) throws FileNotFoundException
    {
                    Scanner in = new Scanner(System.in);
                    System.out.println("Welcome to Exam Analysis.  Let's begin ...");
                    System.out.println();
                    System.out.println();
                    System.out.print("Please type the correct answers to the exam questions, one right af$
                    String answers = in.nextLine();
                    int answersLength = answers.length();
                    System.out.println();
                    System.out.print("What is the name of the file containing each student's responses to$
                    String temp = in.nextLine();
                    File file = new File(temp);
                    Scanner in2 = new Scanner(file);
/*Code Relevant To This Question Begins Here */
                    int lines = 0;
                    String[] aryResponse;
                    while (in2.hasNextLine())
                    {
                            String line = in2.nextLine();
                            aryResponse = new String[lines];
                            aryResponse[lines] = line;
                            System.out.println("Student #" + lines + "'s responses:  " + line);
                            lines++;
                    }
                    System.out.println("We have reached \"end of file!\"");
                    System.out.println();
                    System.out.println("Thank you for the data on " + lines + " students.  Here's the ana$
                    int[] aryCorrect = new int[lines];
                    for (int i = 0; i < answersLength; i++)
                    {
                            if(answers.charAt(i) == aryResponse[i].charAt(i))
                            {
                                    aryCorrect[i] ++;
                            }
                    }
       }
}

共有3个答案

狄宾实
2023-03-14

只需在循环外初始化它

String[] aryResponse=null;

现在将内存分配给aryResponse内部循环

aryResponse = new String[n]; //n is the size of array
公冶元青
2023-03-14

如果我理解了你的代码,arySolutions有几行,如果变量从来没有初始化的同时循环,这意味着你有0行,所以,这将是足够做两件事情:

1-将响应初始化为空:

String[] aryResponse = null;

2-在while循环的末尾添加此行:

if(aryResponse == null) aryResponse = new String[0];
欧阳鸿德
2023-03-14

改变这个

String[] aryResponse;

String[] aryResponse = null;

记住测试aryResponse不是null

if (aryResponse != null) {
  for (int i = 0; i < answersLength; i++) {
    if (answers.charAt(i) == aryResponse[i].charAt(i)) { // what is this testing?
      aryCorrect[i]++;
    }
  }
}

这是必要的,因为

while (in2.hasNextLine()) { // <-- might not be true
  // so this doesn't happen.
}
 类似资料:
  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 所以我已经在结果中声明了相关字符串的值,但是它仍然说我的变量“result”可能还没有初始化。 我正在尝试实现与此类似的输出。任何人都可以帮我吗?谢谢!

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我

  • 我不知道这段代码有什么问题,也不知道为什么会出现错误: 变量isPrime可能尚未初始化 这是完整的代码:

  • 问题内容: 我得到错误: TestCounter.java:115:变量计数器可能尚未初始化counters [i] = new Counter(i); 而且我不知道如何解决它。我知道我的课程“” 有效。下面是我的代码,如果您可以看一下,我将非常高兴。此代码包装在类的main方法中。 问题答案: 您尚未创建数组,只是声明了变量。 您需要这样做: 或类似的东西

  • 在最后一行显示为时出错 :::: 变量结果可能尚未初始化 这是我的代码: