1 if语句与三元运算符
1.1 第一种格式
public static void if1(){
int x = 3;
//if后面必须是条件表达式结果为boolean类型
if(x>1){
System.out.println("yes");
}
System.out.println("over");
//如果if控制的只有一条语句那么括号可以省略,
if (x<1)
System.out.println("HO");//if只控制里他最近的一条语句,如果要控制多条语句要用{}括起来
System.out.println("NO");//该语句跟if没有关系,注意代码的层次感,不要将代码缩进
}
1.2 第二种格式
public static void if2(){
int y = 4;
if(y>1){
System.out.println("yes");
}else{
System.out.println("over");
}
}
对于运算完有结果直接输出的可以用三元运算符来写
1.3 三元运算符(问号表达式)
好处:可以简化if else代码。 if else 结构简写格式:变量 = (条件表达式)?表达式1:表达式2;
弊端:因为是一个运算符,所以运算完必须要有一个结果
如:
String y;
y = (4>7)?"yes":"no";
System.out.println(y);
int a=9,b;
b = (a>1)?100:300;
if(a>1)
b=100;
else
b=300;
//这种运算完有结果的可以用三元运算符比较简单
public class twentyNine {
public static void main(String[] args) {
int num = 5,b;
b = num>9? ++num : --num;
System.out.println(b);
Scanner input = new Scanner(System.in);
int score = input.nextInt();
String s = score>=60? "及格" : "不及格";
System.out.println("你的成绩:"+s);
}
}
1.4 第三种格式
public static void if3(){
int n = 3;
if(n>1)
System.out.println("a");//只要有一个满足程序就结束,都不满足执行else最后结束
else if (n>2)
System.out.println("b");
else if (n>3)
System.out.println("c");
else
System.out.println("d");
}
2 while循环语句
为了简化代码,让代码执行很多次
2.1 第一种格式:
while:先判断条件,只有条件满足才执行循环体
int x = 4;
while(x<8)//如果后面加了;号就会一直判断x<8,(这里是条件表达式,结果一定要是boolean类型,即结果一定要么是真ture要么是假false)
{
System.out.println("x="+x);
x++;
//System.out.println("x="+x++);//可以代替上面的 两条语句 该句既可以打印出x的值又可以将x自增
}//没加括号只能控制最近的一条语句
2.2 第二种格式:
do while:无论条件是否满足先执行循环体一次后再判断条件,条件满足在继续执行循环体(循环体至少执行一次)
int x = 4;
do{
System.out.println("x="+x);
x++;//x自增后变成5后,再执行下面判断x是否小于8
}while (x<8);
3 for循环语句
for循环的格式:
for (初始化表达式;循环条件表达式 ;循环后的操作表达式 ){
执行语句
}
public class ForDemo {
public static void main(String[] args) {
//int x = 3;只有程序读到这时才在内存中开辟空间,而且只要for循环结束内存空间就会被释放。
//第一个只要是合法的表达式就行,第二个一定要是条件表达式
for (int x = 3; x<8 ; x++ ){
System.out.println("x="+x);
//x只在该括号内有效
}
//System.out.println("x======="x);//编译错误,找不到x这个变量
int y =3;
while(y<8)
{
System.out.println("y="+y);
}
System.out.println("y======="+y);//结果可以打印出y的值
/*
1.变量有自己的作用域,对应for来说,如果将用于控制循环的增量定义在for语句中,那么该变量只在for语句中有效
for语句执行完毕,该变量在内存中被释放
2.for和while可以进行互换,用哪个都可以,但是如果需要定义循环增量,用for合适些,比较节省内存
*/
}
}
for循环使用时常见的问题:
for (System.out.println("a");System.out.println("b") ;System.out.println("c") ){
System.out.println("d");
}
//没有结果,因为条件表达式既不是真也不是假所以没结果
public class ForTest1 {
public static void main(String[] args) {
int x =1;
for (System.out.println("a");x<3 ;System.out.println("c") ){
System.out.println("d");
x++;//也可以放在for括号后面,用逗号隔开就行
}
//结果是:a d c d c
//for(这里可以多表达式只要用,隔开)
}
}
无限循环的最简单表现形式:
for (; ; ){}//对于for语句条件表达式只要不写默认就是true
while(true){}
4 switch分支语句
4.1 swithc特点:只接受byte,shotr,int,char
语句的定义顺序可以随意的,但执行顺序还是从第一个case开始
public class SwitchDemo {
public static void main(String[] args) {
int x = 4;
switch (x) {
case 1:
System.out.println("a");
break;
case 2:
System.out.println("b");
break;
case 3:
System.out.println("c");
break;
case 4:
System.out.println("d");
break;//遇到满足条件的就执行该语句并跳出switch语句
default:
System.out.println("e");
break;//可以省略不写,遇到括号就会结束
}
}
}
4.2 使用switch需注意的地方:
无论default放在什么位置,运算都是从第一个case开始,所有case判断完才执行default
所有case不符合,执行default,之后没有break继续执行下面的语句不再判断case,只执行语句,直到遇到break或括号结束switch语句
public class SwitchDemo {
public static void main(String[] args) {
int x = 4;
switch(x)
{
default:
System.out.println("e");
//break;
case 1:
System.out.println("a");
//break;
case 2:
System.out.println("b");
break;
case 3:
System.out.println("c");
break;
}
}
}
4.3 与if语句的比较
什么时候用if 什么时候用switch(if和switch语句很像 具体什么场景下 应用那个语句呢)
1、如果具体数值不多而且符合byte short int char这四种类型
2、虽然两个语句都可以使用,建议使用switch语句,因为效率稍高
3、其他情况:对区间判断,对结果为boolean类型判断使用if if的使用范围更广
5 foreach循环语句:
5.1 foreach介绍
1、格式:
for(类型 变量名称:被遍历数组或集合){
其他操作(输出操作)
}
2、作用:
主要是用于简化书写
5.2 foreach循环语句遍历数组:
public class oneHundredAndEight_oneHundredAndNine {
public static void main(String[] args) {
String[] names = {"萌萌","纯纯","爱爱","凤凤","梦梦"};
for(String x:names){
System.out.print(x+" ");
}
}
}
public class ForEachDemo {
public static void main(String[] args) {
int[] arr = {3,5,6,7};
for (int i : arr ){
System.out.println(i);
}
}
}
5.3 foreach循环语句遍历集合
List集合有两种取出方式,一种是迭代器,和for循环,用get()方法按着角标取出元素
Set集合只有一种取出方式就是迭代器
凡是支持迭代器的集合都可以使用高级for
对集合进行遍历,只能获取元素,但是不能对集合进行过多的操作
迭代器除了遍历还可以对集合中的元素进行remove
如果是ListIterator还可以在遍历过程中对集合进行增删改查的动作
import java.util.ArrayList;
public class ForEachDemo {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("abc2");
al.add("abc3");
al.add("abc1");
/*
for (Iterator<String> it = al.iterator() ;it.hasNext() ; ){
System.out.println(it.next());
}
*/
for(String s : al){
//s = "kk";//s不会改变集合中的元素,只能对集合中的元素取出,不能做修改动作
System.out.println(s);
}
System.out.println(al);//结果还是原集合
}
}
5.4 传统for和高级for的区别:
1、传统for:可以完成对语句执行很多次,因为可以定义控制循环增量和条件
2、高级for有一个局限性,必须有被遍历的目标,而且可能会产生很多的垃圾,在一些内存比较紧张的项目中不建议使用,比如在安卓程序中,建议在遍历数组的时候还是希望使用传统for,因为传统for可以使用角标
3、高级for只能遍历单例集合,要变量双列集合(如Map集合),可以将Map集合变成单例集合再使用高级for
import java.util.HashMap;
public class ForEachDemo {
public static void main(String[] args) {
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"a");
hm.put(2,"a");
hm.put(3,"a");
//先用keySet或entrySet方法变成Set集合,在使用高级for
for (Integer key : hm.keySet()) {
String value = hm.get(key);
System.out.println(key+"...."+value);
}
}
}