0

トランザクションの日付に基づいてアカウントのトランザクションを表示できるようにするプログラムの一部をセットアップしようとしています。ユーザーは月日と年を入力してトランザクションを表示し、それが特定のトランザクションに関連付けられている日付と比較されます。日付が等しいかどうかを判断するコード行を書くのが難しい

if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH).compareTo(month)==0){
                        if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.DAY_OF_MONTH).compareTo(day)==0){
                            if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR).compareTo(year)==0){

私が受け取っているエラーは、「プリミティブ型 int で compareTo(int) を呼び出せません」です。以下の完全なコードを参照してください。

System.out.println("Enter the account number of the account that you want to view transactions for");
            number=keyboard.nextLong();
            System.out.println("Enter the month day and year of the date that the transactions were completed");
            int month=keyboard.nextInt()-1;
            int day=keyboard.nextInt();
            int year=keyboard.nextInt();
            found=false;
            try{
            for(int i=0;i<aBank.getAccounts().size();i++){
                if (aBank.getAccounts().get(i).getAccountNumber().compareTo(number)==0){
                    found=true;
                    System.out.println("Below is a list of transactions completed on "+month+ "/" +day+ "/" +year);
                    for (int j=0;j<aBank.getAccounts().get(i).getTransaction().size();j++){
                    if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH).compareTo(month)==0){
                        if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.DAY_OF_MONTH).compareTo(day)==0){
                            if(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR).compareTo(year)==0){
                                aBank.getAccounts().get(i).getTransaction().get(j).toString();
                                break;
                            }
                        }

                    }

                }
4

4 に答える 4

1

プリミティブ値の場合は、そのまま使用できます==

aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.YEAR)==year
于 2011-06-06T03:40:22.177 に答える
1

使用するだけです:

aBank.getAccounts().get(i).getTransaction().get(j).getTransDate().get(Calendar.MONTH) == month

于 2011-06-06T03:40:28.633 に答える
1

すべてXYZ.getTransDate()が Calendar を返す場合は、
XYZ.getTransDate().get(SOMETHING)primitiveを返しますint。プリミティブには compreTo メソッドがありません。使用するだけです==

XYZ.getTransDate().get(MONTH).compareTo(month) == 0使用 する代わりにXYZ.getTransDate().get(MONTH) == month

于 2011-06-06T03:48:28.893 に答える
0

これはうまくいくはずです:

Calendar transDate = aBank.getAccounts().get(i).getTransaction().get(j).getTransDate();
if (transDate.get(Calendar.YEAR) == year &&
    transDate.get(Calendar.MONTH) == month &&
    transDate.get(Calendar.DAY_OF_MONTH) == day) {

    // do something
}

Apache Commons Langのようなものを使用するとさらに良いです:

if (DateUtils.isSameDay(aBank.getAccounts().get(i).getTransaction().get(j).getTransDate(),
                        Calendar.getInstance().set(year, month, day)) {
    ...
}
于 2011-06-06T13:50:12.020 に答える