第1关:学习-Java顺序结构之基本数据类型转换
任务描述
本关任务:变量 a 是一个 double 型的变量,请将其强转为 int 型,变量 b 是一个 short 型的变量,请将其转换为 double 型。
输出格式:先换行输出变量 a 转换后的结果,再不换行输出 b 转换后的结果。
相关知识
为了完成本关任务,你需要掌握:Java 中基本数据类型的转换。
基本数据类型转换
在 Java 开发之中,经常会涉及到不同类型数据之间进行相互转换。那 Java 之间又是如何转换数据类型的呢?
Java 中数据类型的转换有两种:
-
自动转换;
-
强制转换。
首先我们得需要知道 Java 基本数据类型之间的范围大小。
Java 中整型和浮点型按照范围从小到大:
byte -> short -> int -> long -> float -> double
字符型转换为整型: char -> int
自动转换
自动类型转换 (也叫隐式类型转换) ,其实就是小范围的数据类型向大范围的数据类型转换,你可以想象一下,把一杯水往一个容积大的空桶中倒进,水不会流出来。
注意:自动类型转换的前提条件,必须是把数据类型范围小的数值或变量赋给数据类型范围大的变量。
例子:
int d = 100;
// 当一个 int 类型和一个 long 型相加时,类型会自动转换为 long
long c = 12500000;
long l = c + d;
自动转换也要小心数据溢出问题,看下面的例子。
int d = 1;
int c = 2147483647;
// c+d 本质上依然是 int 型,这里将结果转化为 long
long l = c + d;
System.out.print(l);
执行结果:
-2147483648
结果却输出的是负数,这是因为两个 int 相加得到的结果是 int,相加的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。
int d = 1;
int c = 2147483647;
long e = c;
long l = e + d;
System.out.print(l);
执行结果:
2147483648
我们在之前的实训中了解到了当两个整型做 / 运算时,/ 实际上是求整,那如果我们想要求出准确的结果,我们该怎么做呢?
我们可以将整型转化为浮点型,例如:
int d = 5;
int c = 2;
double e = d; // 将变量d类型转换为double
System.out.print(e/c);
也可以简写为:
int d = 5;
int c = 2;
System.out.print((double)d/c);
执行结果为:
2.5
当范围小的数据与范围大的数据进行运算时,类型会自动转换为范围大的那个类型。所有的 byte 类型、short 类型、char 类型在运算时将被提升到 int 类型。
注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。
强制类型转换
强制类型转换 (也叫显式类型转换) ,其实就是大范围的数据类型向小范围的数据类型转换,它需要加强制转换符来实现强制转换。例子:
double a = 2.31;
int b = (int)a;
System.out.print(b);
执行结果:
2
在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。
强制转换需要注意两点:
-
把一个浮点数强制转换为整数时,Java 会直接截断浮点数的小数部分,造成数据丢失;
-
把一个超出数据范围的数值赋给数据类型时,会出现数据溢出的情况,造成数据的缺失。例如:int 类型的 a 的值为 249,将其强转为 byte 类型时结果会变为 -7,数据溢出。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
开始你的任务吧,祝你成功!
/**
* 任务:变量 a 是一个 double 型的变量,请将其强转为 int 型,
* 变量 b 是一个 short 型的变量,请将其转换为 double 型。
* 输出格式:先换行输出变量 a 转换后的结果,再不换行输出 b 转换后的结果。
* 类名为:Transform
*/
import java.util.Scanner;
public class Transform {
public static void main(String[] args) {
//创建一个Scanner的实例对象,命名为reader
Scanner reader = new Scanner(System.in);
// double型变量a
double a = reader.nextDouble();
// short型变量b
short b = reader.nextShort();
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 第一步:将double型变量a强转为int型
int c=(int)a ;
// 第二步:将short型变量b转换为double型
double d=b;
// 第三步:换行输出变量a转换后的结果
System.out.println(c);
// 第四步:不换行输出变量b转换后的结果
System.out.print(d);
/********** End **********/
}
}