今天,就来探讨一下基本的数据类型,以及,数据类型之间的转换;
一、基本的数据类型
整型 浮点型 字符型 布尔型
1.整型
整型的运算过程中
为了大家更加方便了解,咋们举一个栗子
public class Test01{
public static void main(String[] args){
byte a1=1;
byte a2=2;
byte a3=a1+a2;
System.ot.println(a3);
}
}
试着运行这个代码,你会发现,它出现的内容是不兼容的类型,从int转换到Byte可能有损失;为什么会出现这种情况呢 ,1和2默认的都是Int类型,而a1,a2,a3都是byte类型,所以会报错,要怎么解决这种问题呢,咋们可以强制转换,在a1+a3前面加上Byte,我们来看看修改后的代码。
public class Test01{
public static void main(String[] args){
byte a1=100;
byte a2=100;
byte a3=(byte)(a1+a2);
System.ot.println(a3);
}
}
在运行一遍这个代码就可以运行结果了;
运行的结果是
-56
咋们分析分析,为啥会这样,为啥不是200,Byte的取值范围是在-128-127,200已经超过了它的范围,但它还是输出了,这就是强制转换的结果;
200=1100 1000 然后-1=1100 0111 然后进行取反 = 0011 1000得到的就是-56
同理Short和long也是这样的,在详细说明一下
public class Test02{
public static void main(String[] args){
Short a1=1;
short a2=2;
short a3=a1+a2;
System.ot.println(a3);
}
}
运行之后,它依旧是报错的,报错的原因依旧是:不兼容;要将其改为正确的代码,道理同byte一样,在a1+a3整体前面加上short进行强制转换;
public class Test02{
public static void main(String[] args){
Short a1=1;
short a2=2;
short a3=(short)(a1+a2);
System.ot.println(a3);
}
}
所以,我们可以总结出一下道理来,整型的默认是Int型,其他型想要输出的时候,必须要进行强制转换;
2.浮点型
float型4个字节
double8个字节
浮点型的默认是Double型,输出的时候,若不是Double需要进行强制转换
class test3{
public static void main(String[] args){
float f=3.14;
System.out.println(f)
}
}
这个代码,显而易见,他是不能输出的;错误原因呢,也是不兼容,想要输出,在float类型的常量后面+F;
class test3{
public static void main(String[] args){
float f=3.14F;
System.out.println(f)
}
}
这样就可以输出了;
3.字符型
char 2字节 0-65536 它为啥没有负数,因为字符没有负的
计算机是怎么存字符的呢?字母、数字、标点;
public class Test4{
public static void main(String[] args){
char c1='a';
System.out.println(c1+1);//98 c1后的一个字符编码
System.out.println(c1-1);//96 c1前的一个字符编码
System.out.println((char)('我'+1));//字典中,我后面的那个字 戒
}
}
4.布尔型
它的运行结果只有true、false
二、i++ 和 ++i
对于i++和++i,相信咋们都知道是i++是先运行后+1,++i是先+1,在运行
咋们就来细细说一下i++,可以这样理解,i++是披着羊皮的狼,他在遇到羊之前,都是一匹狼,在遇到羊之后,他就显示出了它的本来的面目,好比说,在运行一个程序,i++本来已经是2,但他外面还披着1的外皮,在进行运算(赋值,调用,输出)中任意一个之后,他的那层外皮就掉了,2显示出来,2去参与运算。
在学术一点就是:
1.先开辟一个临时存储区
2.将I的值复制到存储区
3.i自身+1
4.临时存储区的值等待被调用(赋值,输出,调用);
来,举个例子
public class Test5{
public static void main(String[] args){
int i=3;
i++;
System.out.println(i);//4
System.out.println(i++);//4
int j=i++;
System.out.println(j);//5
System.out.println(i);//6
i=i++;
System.out.println(i);//6
i=i++;
System.out.println(i);//6
}
}
第一个输出想必大家都懂,第二个输出为4,此时i进行输出,i变成了5,在 j=i++的时候,将5赋予J,所以,第三个输出为5,i此时也参与了运算,所以i的值在第四个输出的时候变成了6;i=i++,就是将6赋给了i,所以第五个和第六个的输出都为6;
三、实战演练
3.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度,然后将其转换成为华氏温度,并且显示结果。转换公式: 华氏温度 = (9/5) * 摄氏温度 + 32;
步骤:
1.输入摄氏温度
2.根据题目给的公式进行转换
import java.util.Scanner;
public class Test1{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入摄氏温度:");
double z = input.nextDouble();
double z1 = (9.0/5)*z+32;
System.out.println("摄氏温度为:"+z+"转换为华氏温度为:"+z1);
}
}
3.2(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积:
- 面积=半径* 半径 * p
- 体积= 面积*高
- 步骤:
- 1.输入圆柱体的半径,高
- 2.算出底面积,根据r*r*h
- 3.算体积,根据算出来的底面积
-
3.3 (求一个整数的各个数的和)编写程序,读取一个在 0 和 1000 之间的整数,并将该整数的各位数字相加。例如:整数是 932 , 各位数字之和为 14。import java.util.Scanner; public class Test2{ public Static void main(String[] args){ Double pi = 3.1415926; Scanner input = new Scanner(System.in); System.out.println("请输入圆柱体的半径:"); Double r = input.nextDouble(); Scanner input1 = new Scanner(System.in); System.out.println("请输入圆柱体的高:"); Double h = input1.nextDouble(); Double area = r*r*pi; Double V = area * h; System.out.println("圆柱体的面积是:"+area); System.out.println("圆柱体的体积是:"+v); } }
- 步骤:
- 1.输入一个整数
- 2.整数%10得到个位数
- 3.整数/10%10得到十位数
- 4.整数/10/10得到百位数
- 5.将个位数,十位数,百位数相加
import java.util.Scanner;
public class Test3{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入一个0-1000之间的整数");
int N = in.nextInt();
int N1 = N % 10;
int N2 = N /10 %10;
int N3 = N2%10;
int sum = N1+N2+N3;
System.out.println("这个数的各个数字之和是:"+sum);
}
}
3.4(当前时间)程序清单2-7给出了显示当前格林威治时间的程序。修改这个程序,提示用户输入相 对于 GMT 的时区偏移量,然后显示在这个特定时区的时间。
步骤:1.先获取1970年1月1日到现在的总的毫秒数
2.总毫秒数/1000得到总秒数 总秒数%60得到当前的秒数
3.总秒数/60得到总分钟数 总分钟数%60得到当前得分钟数
4.总分钟数/60得到总小时数 (总小时候数+其他区域)%24得到当地的时间
import java.util.Scanner;
public class Test4{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入时区的偏移量:");
int timePianyi = in.nextInt();
Long totalMilliseconds = System.currentTimeMillis();/*获取1970年到
现在的毫秒数;*/
long totalseconds = totalMilliseconds / 1000;/*得到总秒数*/
long currenSeconds = totalseconds % 60;/*得到当前的秒数*/
long totalMinutes = totalseconds / 60;/*得到总分钟*/
long currentMinutes = totalMinutes % 60;/*得到当前的分钟数*/
long totalHours = totalMinutes /60;/*得到当前的小时总数*/
long currentHour = (totalHours + timePianyi) % 24;
System.out.println("当前的时间是:"+currentHour+":"+currentMinutes
+":"+currenSeconds);
}
}
3.5
(财务应用程序:复利值)假设你每月向银行账户存100美元,年利率为5%,那么每月利率是 0.05/12=0.004 17。
第一个月之后,账户上的值就变成:
100 * (1 + 0.00417) = 100.417
第二个月之后,账户上的值就变成:
(100 + 100.417) * (1 + 0.00417) = 201.252
第三个月之后,账户上的值就变成:
(100 + 201.252) * (1 + 0.00417) = 302.507
依此类推。编写程序显示六个月后账户上的钱数。(在编程练习题 5.30中,你将使用循环来简化这里的代码,并能显示任何一个月之后的账户值。)
数据:月利率0.00417.每月的存款金额100, 要求输出每个月存款100的总金额
步骤:1.算出第一个总金额
2.其余的每个月,皆是 (本月的金额+上月的总金额)*月利息
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入你的每月存款金额:");
double Z = in.nextDouble();
double rLiXi= 1 + 0.00417;
double Month1 = Z * rLiXi;
double Month2 = (Z + Month1) * rLiXi;
double Month3 = (Z + Month2) * rLiXi;
double Month4 = (Z + Month3) * rLiXi;
double Month5 = (Z + Month4) * rLiXi;
double Month6 = (Z + Month5) * rLiXi;
System.out.println("6个月后账上余额为:" + Month6);
}
}
3.6(几何:两点间距离)编写程序,提示用户输人两个点(x1,y1)和(x2,y2),然后显示两点间的距离。计算两点间距离的公式:(x2-x1)^2 + (y2-y1)^2 结果的平方根,注意:可以使用Math.pow(a,0.5) 来计算。
数据:两个点的坐标,求解两点之间的距离
步骤:1.输入两个点的坐标
2.两点之间的距离公式(x-x1)^2+(y-y1)^2
3.开平方,这里用到 Math.pow( ,0.5)这是开根号 平方就是Math.pow( ,2)
import java.util.Scanner;
public class Test6{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter x1 and y1: ");
System.out.print("Enter x2 and y2: ");
double b=input.nextDouble();
double d=input.nextDouble();
double a=input.nextDouble();
double c=input.nextDouble();
double y= (b-a)*(b-a)+(d-c)*(d-c);
double distance = Math.pow(y, 0.5);//power 求开平方(0.5)
System.out.print("The distance the two points is " + distance);
}
}
3.7(几何:三角形的面积)编写程序,提示用户输人三角形的三个点(x1,y1)、(x2,y2) 和 (x3,y3), 然后显示它的面积。计算三角形面积的公式是:
s=(边1+边2+边3)/2
面积: (s * (s - 边1)(s - 边2)(s - 边3))^0.5
数据:三个点的坐标 求三角形的体积
步骤:1.输入三个点的点坐标
2.求出两两点之间的距离,得到的是三条边的长度
3.算出三角形的边长
4.根据边长与面积之间的公式求出三角形的面积
import java.util.Scanner;
public class Test7{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter x1 and y1: ");
System.out.print("Enter x2 and y2: ");
System.out.print("Enter x3 and y3: ");
double b=input.nextDouble();
double d=input.nextDouble();
double a=input.nextDouble();
double c=input.nextDouble();
double e=input.nextDouble();
double f=input.nextDouble();
double y= (b-a)*(b-a)+(d-c)*(d-c);
double y1= (b-e)*(b-e)+(d-f)*(d-f);
double y2= (a-e)*(a-e)+(c-f)*(c-f);
double dis1 = Math.pow(y, 0.5);
double dis2 = Math.pow(y1, 0.5);
double dis3 = Math.pow(y2, 0.5);
double S = (dis1+dis2+dis3)/2;
double are = S*(s-dis1)*(S-dis2)*(S-dis3);
double area = Math.pow(are,0.5);
System.out.println("三角形的面积为:"+area);
}
}
啊,用一张图表示现在自己的心情