流程控制
1、顺序结构
class TestSortStruc
{
public static void main(String[] args)
{
int i=12;
int j=i+1;
System.out.println(j);
}
}
2、分支结构(if-else;switch-case)
If-else语句:
格式:三种
执行if-else语句时,一定会选择其中的一个路径执行,而且也仅会选择一条路径。
1、 条件判断之间可以嵌套
2、 一、如果多个条件之间是“互斥”关系,多个条件语句上下顺序是自由的。
二、如果多个条件之间存在“包含”关系,要求范围小的写在范围大的上面
class TestSortStruc
{
public static void main(String[] args)
{
int age=20;
if(age>18){
System.out.println("你老大不小了");
}else{
System.out.println("你还年轻");
}
if(age>130||age<0){
System.out.println("你估计不是人");
}else if(age<30){
System.out.println("人家只有"+age+"岁");
}
else{
System.out.println("哈哈,你妹的");
}
}
}
!新知识java输入语句
//1.导包
import java.util.Scanner;
class TestScanner
{
public static void main(String[] args)
{
//2.创建一个Scanner类的对象
Scanner s=new Scanner(System.in);
System.out.println("请输入一个字符串");
//3.调用此对象的相应的方法,完成键盘输入的值的获取
// next():表示从键盘获取一个字符串
String str=s.next();
System.out.println("请输入整数:");
int a=s.nextInt();
System.out.println(str);
System.out.println(a);
}
}
switch…case:
/*
switch(变量值){
case 值1;
case 值2:
case 值3:
default:
}
1.根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句。如果没有break或者已经到结尾的话,会继续执行其下的case语句。
2.default:是可选的,而且位置是灵活的。
3.变量可以是哪些类型?char byte short int 枚举 String
4.case 条件:其中条件只能是值,不能是取值范围
*/
class TestSwitch1
{
public static void main(String[] args)
{
int i=2;
switch(i){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("Hello World!");
break;
}
}
}
当多个case语句处理的语句块一致时,可以统一来书写。
一定情况下switch-case与if-else之间可以相互转换。
如果判断的条件不多时,优先使用switch-case.
如果使用范围条件判断,使用if-else.
Eg:判断日期为一年中的第几天
import java.util.Scanner;
class Date
{
public static void main(String[] args)
{
Scanner s =new Scanner(System.in);
System.out.println("请输入年份:");
int year =s.nextInt();
System.out.println("请输入月份:");
int month =s.nextInt();
System.out.println("请输入日期:");
int day =s.nextInt();
int sum= 0;//用来记录month月day日
//使用switch-case
switch(month){
case 12:
sum +=30;
case 11:
sum +=31;
case 10:
sum +=30;
case 9:
sum +=31;
case 8:
sum +=31;
case 7:
sum +=30;
case 6:
sum +=31;
case 5:
sum +=30;
case 4:
sum +=31;
case 3:
if((year % 4==0 && year % 100 !=0)||year % 400==0){
sum +=29;
}else{
sum +=28;
}
case 2:
sum +=31;
case 1:
sum +=day;
}
System.out.println("这个月份为这一年第几天:");
System.out.println(sum);
}
}
3、 循环结构(while;do…while;for( ; ; ))
一、for循环
/*
1、初始化条件
2.循环条件
3、迭代条件
4、循环体
for循环结构:
1.格式:
for(1;2;3){
//4
}
2.执行过程:1-2-4-3-2-4-3-…-4-3-2
即直至循环条件不满足,退出当前的循环
//题目:输出100以内的所有偶数及所有偶数的和(累加的思想)及偶数的个数
int sum=0;//用来记录所有偶数的和
int count=0;
for(int i=1;i<=100;i++){//100以内的自然数的遍历
if(i%2==0){
System.out.println(i);
sum +=i;
count++;
}
}
System.out.println("总和为:"+ sum);
System.out.println("100以内偶数的个数为:"+ count);
}
}
Eg:水仙花数:
class ShuiXianHua
{
public static void main(String[] args) {
for(int i=100;i<1000;i++){//实现100--999的遍历
int j1=i/100;//百位
int j2=(i-j1*100)/10;//十位
int j3=i%10;//个位
if(i==j1*j1*j1+j2*j2*j2+j3*j3*j3){
System.out.println(i);
}
}
}
}
二、while循环
/*
1、初始化条件
2.循环条件
3、迭代条件
4、循环体
1.格式:
1
while(2){
4
3
}
2.for循环与while可以相互转换
*/
class TestWhile
{
public static void main(String[] args)
{
//100以内的偶数的输出,及其和
int i=1;
int sum=0;
while(i<=100){
if(i%2==0){
System.out.println(i);
sum +=i;
}
i++;
}
System.out.println(sum);
}
}
三、do-while循环
/*
1、初始化条件
2.循环条件
3、迭代条件
4、循环体
1.格式:
1
do{
4
3
}while(2)
2.do-while与while的区别:do-while循环至少会执行一次!
class TestDoWhile
{
public static void main(String[] args)
{
int i=1;
do{
if(i%2==0){
System.out.println(i);
}
i++;
}while(i<100);
//do-while与while的区别
int j=10;
do{
System.out.println(j);
j++;
}while(j<10);//10
while(j<10){
System.out.println(j);
j++;
}//无结果
}
}
四、无限循环问题
/*
输入个数不确定的整数,并判断输入的正数和负数的个数,输入0时终止
无限循环
for( ; ; ){
}
或者
while(true){
}
说明:一般情况下,在无限循环内部要有程序终止的语句,使用break实现。若没有,那就是死循环。
import java.util.Scanner;
class TestExer
{
public static void main(String[] args)
{
Scanner s=new Scanner(System.in);
int a=0;//记录正数的个数
int b=0;//记录负数的个数
//for(;;){
while(true){
System.out.println("请输入一个整数:");
int num=s.nextInt();
if(num>0)
a++;
else if(num<0)
b++;
else
break;
}
System.out.println("正数的个数为:" + a);
System.out.println("负数的个数为:" + b);
}
}
五、嵌套循环
/*
嵌套循环:循环中还可以声明循环。相当于内层循环的整体充当外层循环的循环体
for( ; ; ){
for( ; ; ){
}
}
或者
while(){
for( ; ; ){
}
}
class TestForFor
{
/*
*****
*****
*****
*****
*/
public static void main(String[] args)
{
for(int j=0;j<4;j++){//外层循环控制行数
for(int i=0;i<5;i++){//内层循环控制列数
System.out.print("*");
}
System.out.println();
}
/*
*
**
***
****
*/
for(int j=0;j<4;j++){//外层循环控制行数
for(int i=0;i<j+1;i++){//内层循环每行输出j+1个
System.out.print("*");
}
System.out.println();
}
/*
*****
****
***
**
*
*/
for(int i=0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print("*");
}
System.out.println();
}
/*
打印如下图形
上半部分:
----*
---* *
--* * *
-* * * *
* * * * *
i k- j* k=4-i j=i+1
0 4 1
1 3 2
2 2 3
3 1 4
4 0 5
下半部分:
-* * * *
--* * *
---* *
----*
i k- j* k=i+1 j=4-i
0 1 4
1 2 3
2 3 2
3 4 1
*/
//上半部分:
for(int i=0;i<5;i++){
for(int k=0;k<4-i;k++){
System.out.print("-");
}
for(int j=0;j<i+1;j++){
System.out.print("* ");
}
System.out.println();
}
//下半部分:
for(int i=0;i<4;i++){
for(int k=0;k<i+1;k++){
System.out.print("-");
}
for(int j=0;j<4-i;j++){
System.out.print("* ");
}
System.out.println();
}
}
}
六、for循环之打印乘法表
class TestJiuJiu
{
public static void main(String[] args)
{
for(int i=1;i<=9;i++){//一共有9行
for(int j=1;j<=i;j++){//每行有i个等式
System.out.print(i +"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
}
七、for循环之提高效率输出质数
/*
100以内的所有质数
加上break和Math.sqrt()可以提高运行效率
*/
class TestPrimeNumber
{
public static void main(String[] args)
{
boolean flag=false;
long start=System.currentTimeMillis();//获取系统当前的毫秒数
for(int i=2;i<=100;i++){//实现100以内的自然数的遍历
//判断i是否为一个质数
for(int j=2;j<= Math.sqrt(i);j++){
if(i%j==0){
flag=true;
break;
}
}
if(!flag){//if(flag==false)
System.out.println(i);
}
flag=false;
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
//35535--加上break:10059--使用Math.sqrt():3115
}
}
/*
break和continue中标签的使用
*/
class TestPrimeNumber1
{
public static void main(String[] args)
{
long start=System.currentTimeMillis();//获取系统当前的毫秒数
1:for(int i=2;i<=100000;i++){//实现100以内的自然数的遍历
//判断i是否为一个质数
for(int j=2;j<= Math.sqrt(i);j++){
if(i%j==0){
continue 1;
}
}
System.out.println(i);
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
}
}
}
八、for循环之输出完数
/*
输出1000以内的所有完数
*/
class TestWanShu
{
public static void main(String[] args)
{
int factor=0;
for(int i=1;i<=1000;i++){
//每执行完一次如下的循环,就会将i的所有的因子累加到factor中
for(int j=1;j<i;j++){
if(i%j==0){
factor +=j;
}
}
if(i==factor){
System.out.println(i);
}
factor=0;
}
}
}
九、break和continue关键字的使用
/*
break:使用在switch-case中或者循环中
如果使用在循环中,表示:结束当前循环
continue:使用在循环结构中
表示:结束当次循环
关于break和continue中标签的使用(了解)
label:for( ; ; ){
for( ; ; ){
break label;
continue label;
}
}
class TestBreakContinue
{
public static void main(String[] args)
{
/*for(int i=1;i<=10;i++){
if(i%4==0){
//break;//跳出当前循环
continue;//跳出当次循环
//在break和continue语句之后不能添加其他语句,应为永远也不可能执行!
}
System.out.println(i);
}
*/
label:for(int i=1;i<5;i++){
for(int j=1;j<=10;j++){
if(j%4==0){
//break;
//continue;
//break label;
continue label;
}
System.out.print(j);
}
System.out.println();
}
}
}