无法理解我的头脑。为什么我不能在while while循环中使用datumRodjenja变量或尝试阻止?
boolean unosDatuma = false;
LocalDate datumRodjenja = null;
do {
try {
String datumRodjenja = sc.nextLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
return LocalDate.parse(datumRodjenja, formatter);
} catch (Exception ex1) {
System.out.println("Neispravan datum: ");
return unosDatumRodenja(sc);
}
} while (unosDatuma == false);
答案 0 :(得分:1)
因为您声明变量 datumRodjenja 两次(在do-while / try中作为 LocalDate ,在do-while / try中作为 String )相同的范围。
答案 1 :(得分:1)
正如其他人所指出的,你有一个可变的冲突。 首先,您应该使用显式变量名称,并使用适当的类型。 其次,再次阅读有关可变范围的手册。
简而言之:在{}之间声明的变量只存在于这些{}中。 以下代码应该更好,但我还没有测试过。
有些事情我的循环不清楚。
我有一位老师总是说使用:为了更好的算法,在任何编码之前用人类语言写在纸上,清楚地识别变量,停止条件等。
// still something unclera in this code ...
boolean unosDatuma = false;
String datumRodjenja = null;
LocalDate myDate;
do {
try {
datumRodjenja = sc.nextLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
myDate = LocalDate.parse(datumRodjenja, formatter);
unosDatuma = true; // use a consistent exit loop condition
} catch (Exception ex1) {
System.out.println("Neispravan datum: ");
// IMO you should print the exception too ...
// exit loop too ?!
}
} while (unosDatuma == false); // now this looks useful ...
我的unosDatuma
变量对我来说很奇怪,这里似乎没用:你唯一的循环退出条件是return
......
答案 2 :(得分:0)
在给出的答案中已经提到了问题的原因,我只是想纠正编写代码的方式。实际上代码看起来很奇怪。请进行以下更正。对于您的逻辑,根本不需要循环,如果需要,可以使用if条件。
boolean unosDatuma = false;
LocalDate datumRodjenja = null;
if(!unosDatuma){
try {
datumRodjenja = sc.nextLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
return LocalDate.parse(datumRodjenja, formatter);
} catch (Exception ex1) {
System.out.println("Neispravan datum: ");
return unosDatumRodenja(sc);
}
}