学习内容:
一、Java运算符
1.算术运算符
(1)+ - * / %
对于除号:两个整型相除,若结果中出现了小数,此时将从结果中剔除小数部分
(2)自 增 (++)
- 前++ : 变量先加1后再算表达式
- 后++ : 先计算表达式,然后再给变量加1
1 package day01;
2 public class VTest {
3 public static void main(String[] args) {
4 int a=0;
5 a++;
6 System.out.println("a++="+a++);
7 System.out.println("a="+a);
8 }
9 }
2. 赋值运算符
int i = 100 ; // 将100 赋值于变量 i
a+=2,相当于a=a+2;
1 package day01;
2 public class VTest {
3 public static void main(String[] args) {
4 int a=0;
5 a+=2;
6 int b=3;
7 b-=1;
8 int c=4;
9 c*=2;
10 int d=5;
11 d/=2;
12 int e=6;
13 e%=2;
14 System.out.println("a="+a);
15 System.out.println("b="+b);
16 System.out.println("c="+c);
17 System.out.println("d="+d);
18 System.out.println("e="+e);
19 }
20 }
3. 关系运算符
> >= < <= == !=
1 package day01;
2 public class VTest {
3 public static void main(String[] args) {
4 boolean f=5>3;//5>3返回true,否则返回false
5 System.out.println("f="+f);
6 }
7 }
4. 逻辑运算符
- 短路逻辑:与(&&)、或(| |)
与逻辑有一假则为假,或逻辑有一真则为真。据此原理,左边执行满足一定条件后,右边式子将不再执行
- 非短路逻辑:与(&)、非( | )
不管左边表达式正确与否,都会执行右边表达式
注:短路逻辑的效率比非短路逻辑的高
- 取反( ! ):通常用在布尔表达式变量前
5. 位运算符
按位与: 可用来对某些特定的位清零,如对数11010110第2位和第5位清零,可让该数与11101101进行按位与运算
按位异或 : 可以用来使某些特定的位翻转 ; 可以实现两个值的交换而不使用临时变量
左移: 若a= 00001111,a=a<<2,则 a = 00111100,高位左移后溢出,不起作用
在不产生溢出的情况下,左移一位相当于乘2,而且用左移来实现乘法比乘法运算速度快
右移: 与左移相似,移到右端的低位被舍弃,最高位则移入原来高位的值
无符号右移: 与右移相似,不同的是最高位补 0
6. 其他运算符
- 实例运算符 instanceof : 用于测试一个对象是否是一个指定类的实例
1 public class Test {
2 public static void main(String[] args) {
3 String s = "Hello";
4 int[] a = {1,2};
5 if(s instanceof String){
6 System.out.println("true");
7 }
8 if(s instanceof Object){
9 System.out.println("true");
10 }
11 if(a instanceof int[]){
12 System.out.println("true");
13 }
14 }
15 }
- 内存分配运算符 new : 实例化一个对象,即为对象分配内存
- 三目运算符 :布尔表达式 ?值1 : 值2
7. 运算符的优先级
二、程序结构
1. 顺序结构 :自上而下进行
2. 选择结构 :if 语句 、if ... else if 语句、 switch 语句
(1)if 语句:if (布尔表达式) {...}
布尔表达式为 true 时,执行里面的代码,否则不执行
String name="某某” ; System.out.println ( "name+",已经成年了!") ; 输出:某某已经成年了!
(2)if ... else if 语句
(3)switch 语句
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
Scanner con=new Scanner(System.in);
int num=con.nextInt();
switch(num) {
case 1:
System.out.println("quqian");
break;
case 2:
System.out.println("tuichu");
break;
case 3:
System.out.println("zhuanzhang");
break;
default:
System.out.println("qita");
}
}
}
3. 循环结构 :while 、do ... while 、 for 循环
(1)while 循环
重复执行循环体,直到条件式的布尔值为假为止,对于条件式的判断在执行语句之前进行
将布尔表达式换成 true ,可以形成无限死循环
(2) do ... while 循环
重复执行循环体,直到条件式的布尔值为假为止,对于条件式的判断在执行语句之后进行
注意:while(条件式)后面必须有分号
(3)for 循环
如果 3 个表达式都不写 ,则该循环为死循环
打印九九乘法表
1 package day01; 2 public class ForDemo { 3 public static void main(String[] args) { 4 for(int i=1;i<=9;i++) { 5 for(int j=1;j<=i;j++) { 6 System.out.print(j+"*"+i+"="+(i*j)+"\t"); 7 } 8 System.out.println(); 9 } 10 } 11 }
(4)break 和 continue 语句
break 是中断当前循环,continue 是在循环体中继续向下执行
- break
a. 在switch 语句中用来终止一个语句序列
b. 用来退出一个循环
c. 作为一种“先进”的 goto 语句来使用
- continue
三、数组
1. 一维数组
(2)数组的下标从 0 开始
(3)数组的长度为 数组名 . length
(4)数组的打印:
- 使用Arrays打印
1 package day01; 2 import java.util.Arrays; 3 public class ArrayDemo { 4 public static void main(String[] args) { 5 int[] a= {1,2,3,4,5}; 6 System.out.println(Arrays.toString(a)); 7 } 8 }
2.使用 for 循环打印
1 package day01; 2 public class ArrayDemo { 3 public static void main(String[] args) { 4 int[] a= {1,2,3,4,5}; 5 for(int i=0;i<a.length;i++) { 6 System.out.println("a["+i+"}="+a[i]); 7 } 8 } 9 }
用数组够成扑克牌
1 package day01; 2 public class CardDemo { 3 public static void main(String[] args) { 4 //定义字符串类型的数组,用来保存花色 5 String[] suit = {"梅花","方快","红桃","黑桃"}; 6 //定义扑克牌的数字 7 String[] number= {"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; 8 //定义字符串类型的数组,保存扑克牌 9 String[] cards=new String[54]; 10 //初始化扑克牌 11 for(int i=0;i<cards.length-2;i++) { 12 cards[i]=suit[i%suit.length]+number[i%number.length]; 13 } 14 //加上大王和小王 15 cards[cards.length-2]="大王"; 16 cards[cards.length-1]="小王"; 17 //打印扑克牌 18 19 for(int i=0;i<cards.length;i++) { 20 System.out.print(cards[i]+"\t"); 21 if(i%13==0&&i!=0){//打印13张牌的时候换一行 22 System.out.println(); 23 } 24 } 25 } 26 }
2. 二维数组
(1)声明 : 类型 [ ] [ ] 名称
(2)二维数组里存放的是一维数组 :类型 [ ] [ ] 名称 = {数组 1,数组 2,数组 3, 数组 n }
(3)二维数组的下标:
3. 多维数组
(1)定义 : 类型 [ ] [ ] [ ]... 名称 ;
ATM实例
1 package day01; 2 import java.util.Scanner;//要想使用这个类,必须导入 3 public class Main { 4 @SuppressWarnings("resource") 5 public static void main(String[] args) { 6 System.out.print("请输入密码:"); 7 Scanner con =new Scanner(System.in);//用户从键盘中输入密码 8 String line = con.nextLine();//如果密码等于1234的话跳到主页面 9 //java中字符串内容相等使用equals比较 10 if(line.equals("1234")){ 11 System.out.println("1.取款"); 12 System.out.println("2.退出"); 13 int num=con.nextInt(); 14 switch(num) { 15 case 1: 16 System.out.println("1、取款100"); 17 System.out.println("2、取款200"); 18 System.out.println("3、取款500"); 19 System.out.println("4、其他"); 20 int money=con.nextInt(); 21 switch(money) { 22 case 1: 23 System.out.println("取款100!"); 24 break; 25 case 2: 26 System.out.println("取款200!"); 27 break; 28 case 3: 29 System.out.println("取款500!"); 30 break; 31 case 4: 32 System.out.print("请输入金额:"); 33 int other =con.nextInt(); 34 System.out.println("取款:"+other+"元!"); 35 break; 36 } 37 break; 38 case 2: 39 System.out.println("欢迎下次光临!退出!"); 40 break; 41 } 42 } 43 con.close(); 44 } 45 }
遇到的问题:
1. 在ATM问题中,出现 Resource leak: 'con' is never closed 警告,经过网上查询得知其意思是:“资源泄露:"扫描器"永远不会关闭”,即申请了一个输入流 system.in 在你用完这个后没有将其关闭,所以会出现警告。
解决办法为:
在main函数的最后加个 scanner.close();当然那个scanner是你new的Scanner对象。你要换成自己new的那个。 例如 你是 Scanner in = new Scanner(System.in); 那在 main函数最后加上的就应该是 in.close( )
2. 不明白为什么当代码中含有汉字的时候,用cmd运行会出现错误
解决办法为:将编写的Java源程序另存为编码为ANSI的文件(如下图)
明天要学习的内容:
2.13上机练习--3.1