声明变量外部循环并在循环中使用它

时间:2017-03-12 13:00:07

标签: java

无法理解我的头脑。为什么我不能在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);

3 个答案:

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

}