java学习第二章(续)和练习题

一.变量与数据类型

在java中我们一般用 变量类型 变量名; 这样的格式来定义一个变量。

我们由于计算机中需要储存各种各样的数据,比如:整数、小数、字符、字符串等等。所以我们需要用不同的方式去定义他们。

1.整数

整数的定义有以下几种类型:byte、short、int、long。都是整数的定义,他们的区别在于所占内存的大小和可以表示数字的大小。

  • 其中byte是占用内存最小的整数类型,它仅仅占用1个字节,有8个位。所以可以表示的数字个数有2^8个。但是由于负数和0的存在,他的表示范围为-2^7-2^7-1,为-128··127。
  • short占用2个字节,所以就有16位。可以表示的数字一共有2^16个,当然,由于负数和0的存在,它可以表示的数字范围为:-2^15~2^15 - 1,即为 -32768~32767。
  • int占用4个字节,所以有32位,所以可以表示的数字个数为2^32个,由于负数和0的存在,他可以表示的数字范围为:-2^31~2^31 - 1。
  • long 占用8个字节,所以有64位,所以可以表示的数字个数为2^64个,由于负数和0的存在,他可以表示的数字范围为:-2^63~2^63 - 1。

但是我们的整数一般默认为int类型。有多种定义整数的类型避免了空间的浪费。

 在我们写程序的时候,我们不可以这样写:

byte a = 3;
byte b = 4;
byte c = a+b;

由于编译器不知道a和b具体的大小,所以编译器会报错。

正确应该这样写:

byte a = 3;
byte b = 4;
int c = a+b;

如果我们一定要byte类型的c我们可以进行强制类型转换:

byte a = 3;
byte b = 4;
byte c = (byte)(a+b);

2.浮点数

定义浮点数的类型有:float、double。和整数类型一样,他们有自己的占用空间大小和精度。

  • float占用空间比较小,占用4个字节。
  • double占用空间大小为8个字节。

我们默认浮点数为double类型。

一般情况下,定义float类型的浮点数时,需要后面加上F。例如:

float a = 1.41F;

我们的浮点数在与整数相加相减相乘相除时,整数会被转换为浮点数。

3.字符型

我们通常用 char 来定义一个字符。格式如下:

char a = ‘a’;

我们需要一个单引号将字符引用起来。

我们每一个字符都有相对应的Ascll值,我们可以利用java来输出这些数值。例如:

char a = 'a';
int b = a;
System.out.println(b);

我们的小写字母的Ascll值比大写字母大32,我们知道小写字母数值或者大写字母数值时,可以进行相应转换。

4.布尔型

布尔型变量仅仅占用一个字节,他的值只有true和false。我们是这样定义一个布尔型的:

boolean a = true ;
boolean b = false;
System.out.println(a);
System.out.println(b);

显然,系统会输出对应的true和false。

当然,我们的true和false也可以这样输出。

int a = 3;
int b = 4;
System.out.println(a>b);
System.out.println(a==b);
System.out.println(a<b);

在第一个输出会输出false,第二个为false,第三个为true。

5.字符串型

字符为单个字串,字符串为一连串,则为多个字符,通常我们的字符串是用双引号引起来的。我们这样定义一个字符串:

String a = "哈哈";
String b = "haha";
String c = "4515";
String d = "!!!";

很显然,字符串不仅仅可以为文字,也可以是字母或者数字,甚至是符号。

字符串也可以直接进行相加:

String a = "哈哈";
String b = "haha";
String c = "4515";
String d = "!!!";
System.out.println (a+b);

我们直接相加输出则为:哈哈haha

String是java中的一个类,不存在具体大小,大小根据字符串的长短决定。

二.运算符

1.算术运算符

算数运算符有:+ - * / % ++ -- 

(1)+:加法运算,不仅可以对数值进行相加,也可以对字符串进行相加。

System.out.println("你好"+"哈哈");
System.out.println("你好"+1+2+3);
System.out.println(1+2+3+"哈哈");

我们知道第一个相加的结果为:你好哈哈

第二个相加由于前面是字符串,相加时是从左往右加,默认右边也是字符串。结果为:你好123

第三个相加由于前面是算数相加,相加是从左往右,所以结果为:6哈哈

第二个许多人容易失误写错,在我们不确定时,我们需要带上括号:

System.out.println("你好"+(1+2+3));

这时我们的输出就为:你好6

(2):- 减法运算

减法运算很简单,是数值的相减。

System.out.println(3-1);

输出为3和1的差,输出为2

(3): * 乘法运算

乘法运算也是数值上相乘

System.out.println(3*6);

输出为18

(4):/ 除法运算

除法运算是数值上的相除,但是注意整出除以整数还是整数:

System.out.println(3/2);
System.out.println(4/2);

第二个输出是2,第一个输出是1,不是1.5,如果我们需要更精确的结果,我们需要这样输出:

System.out.println(3.0/2);

这样我们的输出就是1.5

(5)% 取余运算:

取余运算为计算两个数相除的余数:

System.out.println(3%2);

输出为1

(6):自加运算和自减运算

int i = 1;
i++;
int j = i++;
System.out.println(j);
System.out.println(i++);
i = i++;
System.out.println(i);
i = i++;
System.out.println(i);
i = i++;
System.out.println(i);

输出结果为:2 3 4 4 4 

i赋值给j时 ,i为2,赋值结束后i为3。

i = i++;这条命令看似没有被执行。原因是将i本来的值赋值给i,i自增后的值会被浪费掉。

i++与++i的区别在于:i++为先执行完这条命令再令i+1,++i为先让i+1后在执行这条命令。自减和自增同理。

2.赋值运算符

赋值运算符的存在简化了代码,让我们更容易地写代码。

赋值运算符分为以下几种:

(1): += 

int a = 1;
a+=3;

在这里+=的意思是a=a+3;

(2):-=

int a = 1;
a-=1;

在这里-=的意思是a=a-1;

(3):/=

int a = 1;
a/=3;

在这里的意思是a=a/3;

(4):*=

int a = 1;
a*=3;

在这里的意思是a=a*3;

(5):%=

int a = 1;
a%=3;

在这里的意思是a=a%3;

(6):=

我们的任何赋值离不开=这个符号。

3.比较运算符

比较运算符有:> < == >= <= !=

其中> < 是判断两个变量在数值上是否相等,而==和!=则是判断两个变量在变量池中所储存的地址是否相同。

比较运算符一般用在if语句或者循环语句中,他的返回值都是boolean类型,只有真和假。

 4.逻辑运算符

逻辑运算符有:与运算符,或运算符,非运算符,异或运算符。

(1)与运算符分为单与:&和双与运算符:&&

他们的区别在于:单与运算符无论式子左边是真还是假,式子右边都会正常进行,而双与运算符只要式子左边是假的,本条命令就会结束,不会继续执行下去。具体代码如下:

int a = 0;
int b = 0;
System.out.println(a++>0 & b++>0);
System.out.println(a);
System.out.println(b);

如果是单与运算符,它的执行结果为:1 1

int a = 0;
int b = 0;
System.out.println(a++>0 && b++>0);
System.out.println(a);
System.out.println(b);

如果是单与运算符,它的执行结果为:1 0

因为执行左边的条件是假的,整个式子就是假的,不执行右边语句,节省了时间。

(2)或运算符分为单或:|和双或运算符:||

他们的区别在于和上面相同,单或运算符无论式子左边是真还是假,式子右边都会正常进行,而双或运算符只要式子左边是真的,本条命令就会结束,不会继续执行下去。

(3)非运算符: !

这个运算符相当于否定含义,如果本来是真的,返回值就是假的,如果本来是假的,那么返回值就是真的。

具体代码如下:

boolean a = true ;
if (!a) 
{
System.out.println("哈哈");
}
boolean a = false ;
if (!b) 
{
System.out.println("33");
}

我们定义a是true,如果语句中如果括号内是真的才会执行,所以第一个如果语句不会执行,因为非a就是假的。第二个如果语句会执行下去,因为b是假的,非b就是真的。

逻辑运算符的返回值都是boolean类型。

5.位运算符

位运算符包括:& | >> << ^

位运算符是二进制的运算。

与:同为1则为1

或:一个为1,则结果为1

 ^:相同则假,不同则真

左移和右移是将二进制较原来的二进制向左或向右移动,取重合位置的部分作为结果。

6.三目运算符

三木运算符就是另一种 if-else 语句。具体代码如下:

int a = 2;
int b = 3;
int c = a>b?a:b;

他的意思是如果a>b为真,那么将a的值赋给c,如果a>b为假,那么将b的值赋给c。

很显然a>b为假,那么c的值就是b的值。c=3

三.从键盘读取值

在Java中,我们需要从用户那里得到数据的时候或者我们需要外界的数据来进行计算时,就需要来得到数据,在Java中我们可以利用Scanner这个类来定义一个对象用来从用户那里得到数据。这个需要java的util里面的Scanner包才可以完成。

在程序的最开头,我们需要输入:import java.util.Scanner; 这句话来导入这个包。

我们定义Scanner类的方法如下:

Scanner in = new Scanner(System.in);

我们利用Scanner这个类创建了in这个对象,我们如何通过in这个对象来读取数据呢?代码时这样的:

int a = in.nextInt;

我们利用in.nextInt来从用户那里读取一个整数。

当需要读取小数或者其他类型时采用in.next类型,其中类型的字一个字母需要大写。

四.科学记数法

我们在Java中表示科学记数法的方法是数字e数字。

例如:3e3,就表示3✖️10^3

5e6代表5✖️10^6

采用科学记数法可以让人很清楚的看到一个很大的数字。

练习题:

1.

这道题首先需要两个变量分别存放华氏温服与摄氏温服,然后读取摄氏温度,套入公式计算华氏温度,要注意定义华氏温服一定要用double类型,否则会引起精度损失。具体代码如下:

import java.util.*;
public class ti211 {

	public static void main(String[] args) {
		double C,F;//C代表摄氏温度,F代表华氏温度。
		System.out.printf("Enter a degree in Celsius:");//提示用户
		Scanner in = new Scanner (System.in);
		C = in.nextDouble();//读取c
		F = 9.0/5.0 * C +32;//代入公式
		System.out.println(C + " Celsius is " + F +" Fahrenheit");//输出结果

	}

}

2.

这道题要求圆柱的底面积和体积。我们发现输出是小数,所以我们在定义半径 面积 和体积的时候需要double类型。

首先读取用户输入的半径和高,然后套入公式计算出面积和体积,再输出。

import java.util.*;
public class ti22 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		double p = 3.1415926;//定义圆周率
		double R,H;//定义半径和高
		System.out.printf("Enter the radius and length of a cylinder");
		//提示用户输入
		R = in.nextDouble();//读取半径
		H = in.nextDouble();//读取高
		double area = p*R*R;//计算面积
		double V = area*H;//计算提及
		System.out.printf("The area is %.4f\n",area);//输出结果
		System.out.printf("The volume is %.1f",V);
		
	}

}

3.

这道题我们需要读取每一个三位数的每一位数字,这时候我们需要知道怎么才可以去读每一位。我们可以通过取余的方式来读取它的最后一位数字,例如:999,我们先取余得到9,然后再对999/10得到99,我们继续对99取余得到9,再99/10得到9,再对9取余得到9。我们需要开始定义一个变量来记录每一位取余得到的结果,然后加上去。最后将结果输出即可。

import java.util.*;
public class ti23 {

	public static void main(String[] args) {
		System.out.printf("Enter a number between 0 and 1000:");//提示用户输入
	    Scanner in = new Scanner (System.in);
	    int num = in.nextInt();//读取数字
	    int sum = 0;//用于计算每一位的和
	    do {
	    	sum = sum + num % 10;//每次取余
	    	num = num/10;//除以十
	       }
	    while(num != 0);
	System.out.println("The sum of the digits is " +sum);//输出结果
	
	}

}

4.

这个题目先获取一个毫秒数,然后对毫秒数除以1000得到一个秒数,我们对秒数除以60得到总分钟数,然后对总分钟数除以60得到总小时数,我们对总小时数对24取余得到当前这个时区的小时数,然后总分钟数对60取余得到当前的分钟数,总秒数对60取余得到当前的秒数。最后将结果输出即可。

import java.util.*;
public class ti24 {

	public static void main(String[] args) {
	Scanner in = new Scanner(System.in);	
	long total =	(int) System.currentTimeMillis();
	int change = in.nextInt();//读取时区
	long totalseconds = total/1000;//总秒数
	long totalminutes = totalseconds/60;//总分钟数
	long seconds = totalseconds%60;//当前秒数
	long minutes = totalminutes%60;//当前分钟数
	long totalhours = totalminutes/60;//总小时数
	long hours = totalhours%24;//当前小时数
	
	System.out.println(hours + ":"+minutes +":"+seconds);//输出
	
	
	}

}

5.

首先·我们定义一个变量来储存每个月存的钱数,然后进行计算。定义一个总钱数为sum。sum第一一月等于money*月利率,第二个月继续sum=(sum+money)*月利率,这样重复6次即为最后的结果,输出即可。

import java.util.*;
public class ti25 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.printf("Enter the monthly saving amont:");//提示用户输入
		int money = in.nextInt();//读取
		double one = money*(1+0.00417);//计算每个月的钱
		double two = (money + one)*(1+0.00417);
		double three = (money + two)*(1+0.00417);
		double four = (money + three)*(1+0.00417);
		double five = (money + four)*(1+0.00417);
		double six = (money + five)*(1+0.00417);
		//输出结果
	    System.out.printf("After the sixth month, the account value is $%.2f",six);
	}

}

6.

这个题首先提示用户输入x1y1,然后输入x2y2.再利用公式和Math.pow(,)来计算最后的结果,输出即可。

需要注意所有变量用double定义,不可避免出现小数。

import java.util.*;
public class ti26 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.printf("Enter x1 and y1:");//提示用户
		double x1 ,x2 ,y1 ,y2;
		x1 = in.nextDouble();//读取坐标
		y1 = in.nextDouble();
		System.out.printf("Enter x2 and y2:");
		x2 = in.nextDouble();//读取坐标
		y2 = in.nextDouble();
		double a = Math.pow((x2-x1), 2);//计算套入共识==公示
		double b = Math.pow((y2-y1), 2);
		double distance = Math.pow((a+b), 0.5);
		System.out.println("The distance between the two points is :"+distance);
		//输出
	}

}

7.

这个题目首先提示用户输入三角形三条边的坐标,我们用double定义所有变量。然后和上个题目相同,这个题需要计算三条边的长度,然后套入公式s=(边1+边2+边3)/2.最后套入面积公式即可,然后输出面积。

import java.util.*;
public class ti27 {

	public static void main(String[] args) {
		Scanner in = new Scanner (System.in);
		System.out.printf("Enter three points for a triangle :");//提示用户
		double x1,y1,x2,y2,x3,y3;
		x1 = in.nextDouble();//读取坐标
		y1 = in.nextDouble();
		x2 = in.nextDouble();
		y2 = in.nextDouble();
		x3 = in.nextDouble();
		y3 = in.nextDouble();
		//计算三个边的长度
		double a = Math.pow ((Math.pow((x1-x2), 2))+(Math.pow((y1-y2), 2)) ,0.5);
		double b = Math.pow ((Math.pow((x1-x3), 2))+(Math.pow((y1-y3), 2)) ,0.5);
		double c = Math.pow ((Math.pow((x3-x2), 2))+(Math.pow((y3-y2), 2)) ,0.5);
		//代入公式
		double s = (a+b+c)/2;
		double k = s*(s-a)*(s-b)*(s-c);
		double area = Math.pow(k,0.5);
		//输出结果
		System.out.printf("The area of the triangle is %.1f",area);
	}

}
发布了3 篇原创文章 · 获赞 4 · 访问量 317

猜你喜欢

转载自blog.csdn.net/m0_46258177/article/details/104199635