首页 > 解决方案 > 使用 do-while 和 ArrayList 时遇到问题

问题描述

我的代码有问题,为什么当 ai 启动时它总是给我一个错误?

Import java.util.*;
public class main {
    ArrayList<String> birth = new ArrayList<String>();
    Scanner scn = new Scanner(System.in);
    public main {
        String input = "", strDay = "", strMonth = "", strYear = "";
        int day = 0, month = 0, year = 0;
        boolean invalid = true;
        System.out.println("Masukkan tanggal lahir Anda (ddmmyyyy): ");
       
        while (invalid) {
            do {
                input = scn.next();
                
                if (input.length() == "0") {
                    birth.add(input);    
                }

                strDay = input.substring(0, 2);
                strMonth = input.substring(2, 4);
                strYear = input.substring(4, 8);
                    
                day = Integer.parseInt(strDay);
                month = Integer.parseInt(strMonth);
                year = Integer.parseInt(strYear);

                if ((month == 1 && day > 31) || (month == 3 && day > 31) || (month == 5 && day > 31) || (month == 7 && day > 31) || (month == 8 && day > 31) || (month == 10 && day > 31) || (month == 12 && day > 31)) {
                    System.out.println("Hari di bulan " + month + " tidak boleh lebih besar dari " + 31);
                    continue;
                }
                    
                if ((month == 4 && day > 30) || (month == 6 && day > 30) || (month == 9 && day > 30) || (month == 11 && day > 30)) {
                    System.out.println("Hari di bulan " + month + " tidak boleh lebih besar dari " + 30);
                    continue;
                }
                
                if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && day > 29) {
                    System.out.println("Hari di bulan " + month + " tahun kabisat tidak boleh lebih besar dari " + 29);
                    continue;
                }
                    
                if (month > 12) {
                    System.out.println("Bulan tidak boleh lebih besar dari " + 13);
                    continue;
                }   

            } while (!input.equals("0"));
            invalid = false;
        }
    }
}

如果我删除了“do-while”并在“while(无效)”中更改为“if”,但为什么当我从“birth”获取数组列表时,它总是输出0?不是我输入的吗?(必须使用 .equal)

if (input.equals("0")) {
   birth.add(input);
   break;
}

标签: javaarraylist

解决方案


你的错误在这里:

if (input.length() == "0") {
       birth.add(input);    
}

该方法length()返回一个 int 并且您正在与一个字符串进行比较。也许你的意思是:

if (!(input.length() == 0)) {
        birth.add(input);    
}

注意 not 运算符


推荐阅读