数据类型

我们在第一节课中看到,当你声明一个变量时,你必须同时给出变量的类型和变量名。这里有一些例子。

英尺,英寸;双米;扫描仪输入;字符串消息;

Java为变量类型提供了两大类:基本类型和对象类型。为了便于区分,Java程序员遵循一个简单的命名约定:赢博体育基本类型的名称都以小写字母开头,而赢博体育对象类型的名称都以大写字母开头。

文字

一旦你声明了一个变量,你就必须给这个变量一个值。要做到这一点,最简单的方法是从字面值初始化变量。这里有一些例子。

int脚;脚= 5;//初始化从int字面量的双米;米= 1.7;//从双字面值String消息初始化;message = "Hello, world!";//从字符串初始化

一个常见的快捷方式是将变量声明和初始化合并到单个语句中。

Int feet = 5;双米= 1.7;字符串消息= "Hello, world!";

String数据类型是不寻常的,因为它是唯一可以用文字初始化的对象数据类型。对于其他对象类型,您必须使用new表达式初始化变量,该表达式将创建所请求类型的新对象。

扫描器输入=新的扫描器(System.in);

类型兼容性规则

由于Java中的变量可以具有不同的类型,因此Java有规则规定,不能将一种类型的值赋给具有不同类型的变量。下面是一些Java认为非法的例子:

双米= 1.7;Int英尺=米;//非法:不能将double赋值给int字符串str = meters;//非法:不能将double赋值给String

这条规则也有一些例外。在某些情况下,Java可以执行自动类型转换,将一种类型转换为另一种类型。

Int feet = 5;双米=英尺;// OK: int 5转换为double 5.0 String str = "Value is " +米;// OK: concatation //自动将双精度5.0转换为字符串“5.0”。

类型保存规则

Java与类型相关的另一个规则是类型保存规则。该规则表示,如果表达式的赢博体育元素都具有特定类型,则结果将自动具有相同的类型。

下面是一个例子:

Int feet = 5;Int英寸= 7;int totalinch = feet*12 + inch;

最后一条语句中的算术表达式只涉及int量,因此计算的最终结果自动是int型,这使得将结果赋值给int型变量是合法的。

与类型保存规则相关的另一个规则是混合表达式规则。该规则表示,如果表达式同时包含整数类型和浮点类型,则结果将自动转换为浮点类型。下面是一个例子:

double厘米= total英寸* 2.54;

在右边的表达式中,totalinch是int型,而字面量2.54是double型。这将触发混合表达式规则,该规则规定totalinch * 2.54的结果必须是双精度数。

整数运算

由于类型保存规则规定任何涉及两个整数的算术都应该产生整数结果,因此在使用整数除法时必须谨慎。这里有一个例子,说明整数除法是多么容易引起麻烦。

我在这门课上展示的第一个例子是一个将华氏度转换成摄氏度的程序。下面是这个程序的一个版本,它实际上是不正确的,因为它在整数除法方面遇到了一个微妙的问题:

公共类FahrenheitToCelsius{公共静态void main(String[] args){扫描仪输入=新扫描仪(System.in);system . out。print(“输入华氏度:”);double fahrenheit = input.nextDouble();//将华氏温度转换为摄氏温度double Celsius =(5 / 9) *(华氏温度- 32);system . out。println(“Fahrenheit “ + Fahrenheit + ”等于” + celsius + " in celsius ");}}

如果你用任何输入来运行这个程序,它将返回0摄氏度的结果!发生这种情况的原因是,在计算转换时,Java将首先计算5 / 9:因为5和9都是整数,所以类型保存规则开始生效并触发整数除法。在整数除法中,5/9的值为0,这反过来使表达式的其余部分的值为0。

对于整数除法问题,通常的补救方法是确保除法中涉及的两个量中至少有一个不是整数—这将触发使用混合表达式规则,该规则表示任何涉及整数和双精度的算术都默认为双精度结果。考虑到这一点,现在有几种方法可以修复上面程序中错误的转换算法。以下任何一种都可以,因为这些示例中的每一个都将设法触发混合表达式规则,从而避免整数除法:

双摄氏度=(5.0 / 9)*(华氏- 32);摄氏2度= 5 *(华氏- 32)/ 9;

mod操作符

类型保存规则规定,任何涉及两个整型的除法必须产生一个整型作为其结果。不幸的是,大多数涉及两个整数的除法都不希望产生整数结果:例如,14/3与4 2/3相同,而4/3不是整数。为了强制赢博体育类型保留规则,Java将通过将结果舍入到最接近的整数来删除除法结果的任何小数部分。因此,在Java中,整数除法表示14/3等于4。

为了部分补偿整数除法造成的信息损失,Java还提供了第五个算术运算符%,用于计算余数。如果a和b是整数变量,则a%b计算a除以b的余数。例如,14.3等于2,因为3除14 4次,余数为2。%操作符也称为mod操作符,a%b通常读作“a mod b”。

14 / 3 = 4

14 % 3 = 2

mod运算符有一个有用的特殊赢博体育:它可以用来确定一个数是否能被另一个数整除。如果b被a整除,那么a%b等于0。

这里有一个例子。要确定给定年份是否为闰年,我们必须使用以下规则。

下面是一个简单的示例程序,用于确定用户输入的年份是否是闰年:

公共类LeapYear{公共静态void main(String[] args){扫描器输入=新的扫描器(System.in);int;system . out。print(“输入年份:”);year = input.nextInt();if(year%400 == 0) //如果年份能被400整除…system . out。println(“年”+“年”+“是闰年”);else if(year%100 == 0) //如果年份能被100整除…system . out。println(“年份”+年份+“不是闰年。”);else if(year%4 == 0) //如果年份能被4整除…system . out。println(“年”+“年”+“是闰年”);else //其他年份。println(“年份”+年份+“不是闰年。”);}}

第一次编程作业

编写一个程序来解决第二章末尾的2.17题。

对于这个程序,您应该从在NetBeans中创建一个新项目开始。要在NetBeans中创建一个新项目,请选择new project…从“文件”菜单中。

这会弹出“新建项目”对话框。NetBeans可以创建各种不同的项目,因此第一步是选择合适的项目类型。单击类别列表中的“Java with Ant”类别,然后单击“Java Application”项目类型。单击Next以移动到下一个对话框。

在第二个对话框中,将项目名称更改为WindChill,然后单击Finish来创建项目。

当你完成编写代码为您的程序,你会把项目文件夹给我打分。要将您的工作发送给我,请将项目文件夹压缩成zip文件,然后将该文件作为电子邮件的附件发送给我。(如果您在寻找项目文件夹时遇到困难,请将鼠标指针放在NetBeans的Projects窗格中的项目上。这将弹出一些文本,显示项目在您的计算机上的位置。项目是项目窗格中它旁边有咖啡杯图标的东西。)

第一次作业的截止时间是9月22日星期二下午5点。

如果你在作业上需要帮助,欢迎在办公时间来找我。我的办公时间是周一到周五,每天3点到5点。要在办公时间见我,请使用我之前发邮件给你的Zoom个人会议空间的链接。