当前位置: 首页 > 知识库问答 >
问题:

二进制运算符的错误操作数类型"-"第一种类型: int;第二种类型:java.lang.字符串

海宁
2023-03-14

我无法将字符串(生日)转换为整数(年龄)。我希望有人输入他们的出生年份,并让程序做一个简单的减法计算出他们的年龄。我是编程新手,所以我一直在四处寻找,大多数地方都告诉我同样的事情。

Integer.parseInt(birthyear);

然而,在做了这些之后,当我尝试做数学时。。。

int age = year-birthyear;

我得到了标题中的错误。

public class WordGameScanner
{
    public static void main(String[] argus)
    {
        String name;
        String home;
        String birthyear;
        String course;
        String reason;
        String feedback;
        int year = 2013;

        Scanner input = new Scanner(System.in);
        System.out.print("What is your name: ");
        name = input.nextLine();
        System.out.print("Where are you from: ");
        home = input.nextLine();
        System.out.print("What year were you born: ");
        birthyear = input.nextLine();
        Integer.parseInt(birthyear);
        System.out.print("What are you studying: ");
        course = input.nextLine();
        System.out.print("Why are you studying " + course + ": ");
        reason = input.nextLine();
        System.out.print("How is " + course + " coming along so far: ");
        feedback = input.nextLine();

        int age = year-birthyear;

        System.out.println("There once was a person named " + name +
            " who came all the way from " + home +
            " to study for the " + course +
            " degree at --------------.\n\n" + name +
            " was born in " + birthyear + " and so will turn " + age +
            " this year.");
        System.out.println(name + " decided to study the unit ------------, because \"" +
            reason + "\". So far, ----------- is turning out to be " +
            feedback + ".");
    }
}

很抱歉,如果这是在错误的地方,这只是我在这里的第二个帖子。我只是点击“提问”并按照指示进行操作

共有3个答案

胡承载
2023-03-14

整数。parseInt不会将生日从字符串更改为int,它只是返回字符串所代表的int。您需要将这个返回值分配给另一个变量,并在减法中使用它。

倪鸿禧
2023-03-14
Integer.parseInt(birthyear);

不会覆盖生日值,也不会将其类型从String更改为int

所以你必须这么做

int intbirthyear = Integer.parseInt(birthyear);

然后

int age = year-intbirthyear;
胥和悌
2023-03-14
int age = year-Integer.parseInt(birthyear);

调用parseInt并不会将变量String birthYear重新定义为int,它只会返回一个int值,可以存储在另一个变量中(比如int birthYearInt=Integer.parseInt(birthYear)) )或在上述表达式中使用。

你可能还需要花一分钟考虑输入。

用户可以只输入最后两位数字(“83”而不是“1983”),因此您可以:

int birthYearInt = Integer.parseInt(birthYear);
if (birthYear.length() == 2) {
  // One way to adjust 2-digit year to 1900.
  // Problem: There might not be more users born in 1900 than born in 2000.
  birthYearInt = birthYearInt + 1900; 
}
int age = year = birthYearInt;

或者,您可以使用java。文本NumberFormat以正确处理输入中的逗号NumberFormat是处理来自人类的数字的好方法,因为它处理的数字格式与计算机不同。

另一个问题是,这使用了中国的年龄编号系统,每个人的年龄在新年(农历,而不是公历)增加一岁。但这并不是全世界计算年龄的方式。例如,在美国和欧洲大部分地区,你的年龄在你出生的周年纪念日增加。

 类似资料: