Java 如何在case语句中使用do/while?
我想生成一个唯一的术语,即一个字母后跟两个数字,然后我想检查它是否不在数据库中。我试着使用do,然后是一段时间,但我无法让它工作。我得到一个Java 如何在case语句中使用do/while?,java,switch-statement,do-while,Java,Switch Statement,Do While,我想生成一个唯一的术语,即一个字母后跟两个数字,然后我想检查它是否不在数据库中。我试着使用do,然后是一段时间,但我无法让它工作。我得到一个java:expression的非法开始错误。你能看出我做错了什么吗?或者,有没有更好的方法 这是我的密码: public String setNumber(ReportType type) { Random rand = new Random(); String number = String.forma
java:expression的非法开始错误。你能看出我做错了什么吗?或者,有没有更好的方法
这是我的密码:
public String setNumber(ReportType type) {
Random rand = new Random();
String number = String.format("%02d", rand.nextInt(100));
String prefix = "";
do {
switch (type) {
case CHILD:
prefix = "A";
break;
case ELDER:
prefix = "B";
break;
case BOOMER:
prefix = "C";
break;
}
String fullNumber = prefix + number;
while (dataBase.findInDataBase(fullNumber)) throws FileNotFoundException);
}
return fullNumber;
}
代码中有两个语法错误:
在do
之后开始的花括号必须在之前结束,而不是在它之后结束
抛出FileNotFoundException
不属于它所在的位置。您可能从findInDataBase
方法的声明或其他地方复制了它。删除它就行了
编辑:
findInDataBase
在
在数据库中找不到项。它不返回布尔值。什么时候
未找到任何内容,我想返回已确认的唯一术语。我该怎么办
完成while语句
使用try
-catch
构造查看是否引发异常。和一个布尔
变量来控制循环
public String setNumber(ReportType type) {
Random rand = new Random();
String number = String.format("%02d", rand.nextInt(100));
String prefix = "";
String fullNumber;
boolean found;
do {
switch (type) {
case CHILD:
prefix = "A";
break;
case ELDER:
prefix = "B";
break;
case BOOMER:
prefix = "C";
break;
}
fullNumber = prefix + number;
try {
dataBase.findInDataBase(fullNumber);
found = true;
} catch (FileNotFoundException fnfe) {
found = false;
}
} while (found);
return fullNumber;
}
public String setNumber(ReportType type) {
Random rand = new Random();
String number = String.format("%02d", rand.nextInt(100));
String prefix = "";
// This loop will be terminated by a return statement inside of it.
while (true) {
switch (type) {
case CHILD:
prefix = "A";
break;
case ELDER:
prefix = "B";
break;
case BOOMER:
prefix = "C";
break;
}
String fullNumber = prefix + number;
try {
dataBase.findInDataBase(fullNumber);
} catch (FileNotFoundException fnfe) {
// Nothing is found; return the confirmed unique term:
return fullNumber;
}
}
}
备选方案:以下内容可能会引发激烈的讨论,因为有些人发现这是一种糟糕的风格。它简化了一些事情,因为它使我们不用在循环之前声明两个未初始化的变量
public String setNumber(ReportType type) {
Random rand = new Random();
String number = String.format("%02d", rand.nextInt(100));
String prefix = "";
String fullNumber;
boolean found;
do {
switch (type) {
case CHILD:
prefix = "A";
break;
case ELDER:
prefix = "B";
break;
case BOOMER:
prefix = "C";
break;
}
fullNumber = prefix + number;
try {
dataBase.findInDataBase(fullNumber);
found = true;
} catch (FileNotFoundException fnfe) {
found = false;
}
} while (found);
return fullNumber;
}
public String setNumber(ReportType type) {
Random rand = new Random();
String number = String.format("%02d", rand.nextInt(100));
String prefix = "";
// This loop will be terminated by a return statement inside of it.
while (true) {
switch (type) {
case CHILD:
prefix = "A";
break;
case ELDER:
prefix = "B";
break;
case BOOMER:
prefix = "C";
break;
}
String fullNumber = prefix + number;
try {
dataBase.findInDataBase(fullNumber);
} catch (FileNotFoundException fnfe) {
// Nothing is found; return the confirmed unique term:
return fullNumber;
}
}
}
您还没有解决问题。您需要在每次循环中从随机数中提取一个新的随机数。否则,如果绘制的第一个数字已经在数据库中,则您处于无限循环中。如果00到99之间的所有100个数字都在使用中,您仍将使用
注意:自JavaSE14*以来,您可以使用switch
表达式代替switch
语句
do {
prefix = switch (type) {
case CHILD -> "A";
case ELDER -> "B";
case BOOMER -> "C";
};
fullNumber = prefix + number;
} while (dataBase.findInDataBase(fullNumber));
*开关表达式是在JavaSE12中引入的。然而,它在JavaSE12和JavaSE13中仍然是一个预览特性,并最终在JavaSE14中实现了标准化。您可以查看以了解更多信息。我认为除了使用整数和字符串
开关之外,您不能使用对象
,而且您的do
在期间没有与配对。而while(dataBase.findInDataBase(fullNumber))抛出FileNotFoundException)
没有意义。括号不匹配。最多可以选择100个潜在数字。列出所有这些数字(如果是儿童,则为A00到A99),从数据库中获取所有数字并将其从列表中删除,然后从列表中随机选择剩余的数字之一。我认为这会更快,因为您只需要询问数据库一次。相同吗?至少代码是相似的,缩进/结构错误是相同的,'{}'
是相同的important@neha您忘记了枚举和所有整数类型:“选择器表达式的类型必须是char、byte、short、int、Character、byte、short、Integer、String或枚举类型”,谢谢,findInDataBase
在数据库中找不到项时抛出一个fileNotFoundException
异常。不是布尔值。如果未找到任何内容,我希望返回已确认的唯一术语。如何完成while
语句?