【问题标题】:Calculate the user age with LocalDateTime使用 LocalDateTime 计算用户年龄
【发布时间】:2021-12-29 21:47:16
【问题描述】:

我正在尝试制作一个程序,提示用户输入他们的生日年份(如 2001 年)。然后做一些数学上的事情(现在 - 用户写的年份(2021 - 2001))。但是,我收到此错误:

运算符“-”不能应用于字符串 int。

如何解决这个错误?

代码:

package com.myApp.User;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class GetUserAge {

    public String localtimeYear;
    public int userBirthdayYear;

    public static void main(String[] args) {

        Scanner scannerObject = new Scanner(System.in);
        GetUserAge getUserAgeObject = new GetUserAge();
        LocalDateTime localDateObject = LocalDateTime.now();
        DateTimeFormatter localDateObjectFormatted = DateTimeFormatter.ofPattern("yyyy");

        getUserAgeObject.localtimeYear = localDateObject.format(localDateObjectFormatted);
        // System.out.println(getUserAgeObject.localtimeYear); => 2021
        getUserAgeObject.userBirthdayYear = scannerObject.nextInt();
       System.out.println(calculateTrueBirthdayYear(getUserAgeObject.userBirthdayYear));
    }

    static int calculateTrueBirthdayYear(int userBirthdayYear) {

        GetUserAge getUserAgeObject = new GetUserAge();

        return (getUserAgeObject.localtimeYear - userBirthdayYear);
    }
}

【问题讨论】:

  • 请注意,仅使用年份会在生日前后给出错误的结果,具体取决于您的目标。
  • 您可以在返回语句中使用Integer.valueOf(getUserAgeObject.localTimeYear) - userBirthdayYear,因为您的 localTimeYear 是一个字符串,需要转换为整数才能对其进行数学运算

标签: java java.util.scanner java-time


【解决方案1】:

String 不是数字

您的错误一定来自这一行:

return (getUserAgeObject.localtimeYear - userBirthdayYear);

... 因为成员字段localtimeYear 引用了String 对象。您不能在 String 对象上使用数字运算符 -

Year

如果您只想关注年份,请使用Year 类。

Year currentYear = Year.now() ;
Year birthYear = Year.of( 1970 ) ;

算一算。

int approximateYearsOld = currentYear.getValue() - birthYear.getValue() ;

示例类。

package work.basil.age;

import java.time.Year;

public record Person( String name , Year birth )
{
    public int calculateApproximateAge ( )
    {
        return ( Year.now().getValue() - this.birth.getValue() );
    }
}

用法。

Person alice = new Person( "Alice" , Year.of( 1972 ) );
int approxAge = alice.calculateApproximateAge();

System.out.println( "alice = " + alice );
System.out.println( "approxAge = " + approxAge );

爱丽丝=人[姓名=爱丽丝,出生=1972]

大约年龄 = 49

【讨论】:

    【解决方案2】:

    为什么不利用可用的 API,您可以执行类似...

    LocalDate ld = LocalDate.of(1972, Month.MARCH, 8);
    Period p = Period.between(ld, LocalDate.now());
    System.out.println(p.getYears());
    System.out.println(p.getMonths());
    System.out.println(p.getDays());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2020-12-28
      • 2016-03-20
      相关资源
      最近更新 更多