Java初始化变量错误

Java Initializing Variable Error

我有一个错误提示我没有在 buffer.write(variable); 行中初始化我的 firstline、secondLine 和 thirdLine 变量,变量为 firstLine、secondLine 和 thirdLine。直到我在代码中的 variable == JOptionPane.showInputDialog("Enter name"); 行周围添加 while(number == null || number.equals("")) 后,才出现此错误。有没有办法在保留我添加的代码的同时处理这个错误?

    import java.awt.Graphics;   
    import javax.swing.JOptionPane;
    import java.io.*;
    import java.io.FileWriter; 

    public class CreateData {

    public static void main(String[] args)
    {

        JOptionPane.showMessageDialog(null, 
          "this program writes payroll data",
          "Welcome", JOptionPane.PLAIN_MESSAGE);

        Write();
    }

    static void Write()
    {
      try {  
        String firstLine, secondLine, thirdLine, number = " ";
        File check = new File("payroll.txt");  
        FileWriter file;
        if(check.exists()) 
          file = new FileWriter("payroll.txt", true);
        else
          file = new FileWriter("payroll.txt"); 

        BufferedWriter buffer = new BufferedWriter(file);
        int size, count = 1;
        while(number == null || number.equals("")) 
        {
        number = JOptionPane.showInputDialog("how many records?");
        }

        size = Integer.parseInt(number);

         do { 
          while(number == null || number.equals("")) 
          {
          firstLine = JOptionPane.showInputDialog("Enter name");// prompts for input and displays "Enter Name"
          }
          while(number == null || number.equals("")) 
          {
          secondLine = JOptionPane.showInputDialog("Enter hours");
          }
          while(number == null || number.equals("")) 
          {     
          thirdLine = JOptionPane.showInputDialog("Enter wage");
          }
          buffer.write(firstLine);//write firstLine variable to payroll.txt file
          buffer.newLine();
          buffer.write(secondLine);
          buffer.newLine();
          buffer.write(thirdLine);
          buffer.newLine();
          count++;

        }while(count <= size);

        buffer.close();//closes the data writing stream to payroll.txt file

        JOptionPane.showMessageDialog(null, "data processed",
        "Result", JOptionPane.PLAIN_MESSAGE );//display message "data processed"

        System.exit(1);
        }

      catch (IOException e) { System.out.println(e); }  


    }
    }

这一行

String firstLine, secondLine, thirdLine, number = " ";

等于

String firstLine;
String secondLine;
String thirdLine;
String number = " ";

所以你需要初始化你的第一行,第二行,第三行:

String firstLine = "";
String secondLine = "";
String thirdLine = "";
String number = " ";

让我用类似的问题来回答你的问题:

int x;

while(false) {
    x = 10;
}

System.out.println(x);

因为没有保证进入while循环,因此没有保证 x被初始化.

你的代码出现同样的问题。即使你在逻辑上确信你会进入while loop,编译器也需要确定

因此,请初始化您的变量。这不会像您认为的那样初始化它们。事实上,它只初始化最后一个变量。

String firstLine, secondLine, thirdLine, number = " ";

试试这个:

String firstLine, secondLine, thirdLine, number;
number = " ";
firstLine = null;
secondLine = null;
thirdLine = null;

您也可以这样做:

String firstLine, secondLine, thirdLine, number;
number = " ";
firstLine = secondLine = thirdLine = null;

请注意,您不必将变量初始化为 null:您也可以将它们初始化为任何其他 String

在设置变量的地方添加 while 循环意味着如果条件永远不会满足,变量将不会收到值。

但是那些 while 循环是错误的。一般来说,while 循环不应该有一个条件来等待它们内部没有改变的东西。由于 number 是局部变量,因此没有其他线程会更改它,并且它不会在循环本身内部更改:

      while(number == null || number.equals("")) 
      {
          firstLine = JOptionPane.showInputDialog("Enter name");// prompts for input and displays "Enter Name"
      }

我很确定你真的想提出这个条件:

      while(firstLine == null || firstLine.equals("")) 
      {
          firstLine = JOptionPane.showInputDialog("Enter name");// prompts for input and displays "Enter Name"
      }

所以你应该改正。尽管如此,编译器可能仍然对此不满意,因此您确实应该在声明变量时提供默认值,正如另一个答案告诉您的那样,声明:

String firstLine, secondLine, thirdLine, number = " ";

没有 将所有变量设置为 " " - 只有 number 变量。您需要分别分配给它们中的每一个。

您设置的值应该而不是 " " (a space)。因为它不满足任何一个条件(它不是 null 也不是空的)所以它不会进入循环,你会想知道为什么你只是得到 spaces。您应该将其设置为 null 或空字符串。

只需将三个变量初始化为null.. String firstLine=null, secondLine=null, thirdLine=null;