Java初始化变量错误

时间:2015-02-21 20:55:36

标签: java variables null initialization

我有一个错误,说我没有在buffer.write(variable);行初始化我的firstline,secondLine和thirdLine变量,变量是firstLine,secondLine& thirdLine。在我的代码中while(number == null || number.equals(""))行周围添加variable == JOptionPane.showInputDialog("Enter name");之前,此错误未显示。有没有办法处理这个错误,同时保留我添加的代码?

    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); }  


    }
    }

4 个答案:

答案 0 :(得分:1)

这一行

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

等于

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

所以你需要初始化你的firstLine,secondLine,thirdLine:

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

答案 1 :(得分:1)

在设置变量的位置周围添加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变量。您需要分别分配给每个人。

您设置的值应" "(空格)。因为它不符合任何条件(它不是空的并且它不是空的)所以它不会进入循环,你会想知道为什么你只是得到空格。您应该将其设置为null或空字符串。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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