接着昨天的if switch
//switch的星期几
int i=9;
switch(i){//switch()里面必须是byte,short,int,char.string.枚举
case 1://case后面必须是常量,确定的
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default://任选的,可写可不写同else
System.out.println("none");
break;//没有他就卡不住了,从头到尾不会停止。必须写
}
}
}
//switch与if两个语句对比。
//switch:数值不多,符合byte,short,int,char,建议使用,效率更高
//if范围更广,结果为布尔类型的。不知道用哪个的时候都使用if ,通用,主要使用if
循环结构
for循环
public static void main(String[] args) {
// 连续输出五次hello world
for(int i=0;i<5;i++ ) {//初始化表达式1;布尔值测试表达式2;更改表达式
System.out.println(i);//过程,初始化i(变量),判断是否小于5,如果是就开始执行{}里的代码块即输出hello,然后执行更改表达式i++,重新赋值
//i=1,判断是否小于5,是,执行{}里输出。。。。。。。
System.out.println("hello world");
}
}
计算1+2+3……100=5050
public static void main(String[] args){
int result=0;
for(int i=1;i<=100;i++){
result+=i;
}
System.out.println("result="+result);
}
小练习/3.输出水仙花数
(一个三位数,153=111+333+555),
思路:先循环所有三位数100-999,拆分出三位
//例如145,145/100=1,(145-1*100)/10=4,145-1*100-4-10=5
for(int j=100;j<=999;j++) {
int a=j/100;//得到百位数
int b=(j-a*100)/10;
int c=j-100*a-10*b;
int res=a*a*a+b*b*b+c*c*c;//判断是不是水仙花数
if(res==j){
System.out.println(j);
}
}
while循环与do-while循环
//用while循环输出1-100
int i=1;
while(i<=100) {
//获取变量i<=100的结果,是真还是假,如果是真就执行while后面{}里的代码,假的就不执行
System.out.println(i);
i++;//不断改变i的值
//do-while
int m=1;
do {
System.out.println(m);
m++;
}while(m<=100);
}
小练习
//求1-100所有偶数的和,用for,while分别实现
int res=0;
for(int i=1;i<=100;i++) {
if (i%2==0) {
res+=i;
}
}
System.out.println(res);//注意,要在for循环之外输出最后的结果
int rt=0;
int k=1;
while(k<101) {
if(k%2==0) {
rt+=k;
}
k++;
}
System.out.println(rt);
无限循环
for(;;){}
while(true){}
嵌套循环
注意;尽量保证外层大循环次数小于内层小循环
小练习:
//输出1-100所有质数(大于1自然数,只能被1和本身整除)
//思路:4,4除以1,2,3,4能被整除几次,取模判断,如果只有两次就是质数
for(int i=1;i<=100;i++) {
int k=0;//整除的次数
for(int j=1;j<=i;j++) {//循环1-i,用i与1-i之间的数进行分别驱魔
if(i%j==0) {
k++;
}
}
if(k==2) {
System.out.println(i);
}
}
特殊流程控制语句
break终止循环 终止当前所在的循环。只用于switch语句和循环语句
contiune结束当前这次循环,直接进入下一次循环 对当前所在循环起作用,结束当前这次循环,当前循环的下面的代码不执行,直接进入下一次循环 只用于循环语句
return结束方法 看起来与break相似,但是return是结束了整个方法,break仅仅结束了当前的循环
一维数组
数组:存放多个数据的集合
int i [ ];
动态初始化:
数组元素默认值,数字0,对象默认null
int [] i=new int[4];//能放下4个int类型的数组
i[0]=2;//数组的赋值
静态初始化
int [] i=new int[] {1,2,3,4};//放1 2 3 4数组
如何引用:
数字下标,从0开始。.length长度
多维数组
int [][] i=new int[] [];{
{1,2},
{3,4}
};
int [][] i=new int[2] [3];//第一维度长度2,第二维度3
{
{1,2,3},
{3,3,3}
}
特殊写法 int [] x,y[];x是一维数组,y是二维数组
数组小练习
int [] [] arr=new int [] [] {
{3,8,2},
{2,7},
{9,0,1,6},
};
int len=arr.length;//数组的一维长度
int res=0;
for(int i=0;i<len;i++) {
int [] arro=arr[i];
//二维数组长度
for(int j=0;j<arro.length;j++) {
res+=arro[j];
}
}
System.out.println(res);
}
}
数组的复制
冒泡排序
//正序,从大到小
//4,7,3,1
第一轮4,3,1,7
第二轮3,4,1,7 得到除了最后一个属最大之外,最大的数字
第三轮1,3,4,7
int arr[]=new int[]{4,7,3,1};
int temp=0;
for(int i=0;i<arr.length-1;i++){//外层循环是循环几轮的次数,轮数循环的次数时数字的长度-1
for(int j=0;j<arr.length-1-i;j++){
//每一轮次的数字对比排序,每论次循环一次4.3.2
if(arr[j]>arr[j+1])
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;//两个相邻元素,前面的大于后面的,进行交换
}
}
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}