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;
我有一个错误提示我没有在 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;