Demo1:
循环结构:
1、while 先进行判断,再进行逻辑执行
需要四部分组成
初始化:变量的初始化
条件判断:必须要求返回true或者false的值
循环体:具体的要执行的逻辑代码
迭代变量:促使此循环结束
2、do while 先执行代码逻辑,再执行判断
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:04
* @Description:
**/
public class Demo1 {
public static void main(String[] args) {
//System.out.println("好好学习,天天向上");
//1、定义一个变量
//2、使用这个变量进行判断,只要满足条件,执行某块代码
//3、改变变量以改变条件的结果,达到退出循环的目的
int i=1;
while(i<=10){
System.out.println("第"+i+"次写:好好学习,天天向上");
i++;
}
int a=1;
while(a<=50){
System.out.println("打印第"+a+"份试卷");
a++;
}
}
}
Demo1_1:用for循环实现打印100次好好学习天天向上
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 15:17
* @Description:用for循环实现打印100次好好学习天天向上
**/
public class Demo1_1 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
System.out.println("第"+i+"次写,好好学习,天天向上!");
}
}
}
Demo3:老师检查张浩学习成果
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:22
* @Description:老师检查张浩学习成果
**/
public class Demo3 {
public static void main(String[] args){
boolean needStudy=true;
while(needStudy){
System.out.println("张浩学习");
Scanner scanner =new Scanner(System.in);
System.out.println("请老师给出结论,合格为false,不合格为true:");
needStudy=scanner.nextBoolean();
}
System.out.println("恭喜张浩神功大成");
}
}
Demo4:
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:29
* @Description:
**/
public class Demo4 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//张浩先做测试题
//老师给出判断,如果不通过,则循环以上的过程
System.out.println("张浩开始考试!");
System.out.println("请老师给出结果,true为不通过,false为通过");
boolean needTest=sc.nextBoolean();
while (needTest==true){
System.out.println("不合格");
System.out.println("张浩开始考试!");
System.out.println("请老师给出结果,true为不通过,false为通过");
needTest=sc.nextBoolean();
}
System.out.println("恭喜张浩通过考试");
}
}
Demo4_1:do_while实现考试验证
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:41
* @Description:do_while实现考试验证
**/
public class Demo4_1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
boolean needTest;
do{
//可以减少重复代码
System.out.println("张浩先来考试!");
System.out.println("请老师给出评价,true为不通过,false为通过");
needTest=sc.nextBoolean();
}while(needTest==true);//不要忘记分号
}
}
Demo5:循环输入5门课的成绩,并计算平均分
第三种循环结构是for循环,使用最多
语法规则:
for(初始化1;条件表达式2;步进器4){
代码逻辑3
}
使用for循环的好处:
1、代码简洁
2、变量初始化的时候,for循环的作用域仅仅是当前for循环结构
while循环的作用域是从变量的定义开始到整个方法结束
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 15:22
* @Description:循环输入5门课的成绩,并计算平均分
**/
public class Demo5 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int sum=0;//定义一个总分
for (int i = 0; i <5 ; i++) {
System.out.print("请输入第"+(i+1)+"门课的成绩:");
int score = sc.nextInt();
sum+=score;
}
double avg=sum/(double)5;//隐式类型转换
System.out.println(avg);
}
}
Demo6:从控制台接收数字,打印加法表
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 15:53
* @Description:从控制台接收数字,打印加法表
**/
public class Demo6 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数字:");
int num=sc.nextInt();
for(int i=0;i<=num;i++){
System.out.println(i+" + "+(num-i)+" = "+num);
}
}
}
Test1:有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:49
* @Description:有1020个西瓜,第一天卖掉总数的一般后多卖了2个
* 以后每天卖剩下的一半多两个,问几天以后能卖完?
**/
public class Test1 {
public static void main(String[] args) {
int num=1020;
int day=0;
do{
num=num/2-2;
day++;
}while(num>0);
System.out.println("经过"+day+"天瓜就卖完了");
}
}
Test2:猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 14:56
* @Description:猴子摘桃,循环9次,每次一半多一个,最后剩1个
**/
public class Homework2 {
public static void main(String[] args) {
/* int day;
int sum=1;
for (day = 1; day <10; day++) {
sum=(sum+1)*2;
}
System.out.println("第一天共摘了"+sum+"个桃子");
*/
System.out.println("第一天摘的桃子数:");
int sum = getSum(1);
System.out.println(sum);
}
public static int getSum(int day){
if(day==10){
return 1;
}else{
return ((getSum(day+1)+1)*2);
}
}
}
Test3:有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对? 分析:兔子的规律为数列,1,1,2,3,5,8,13,21
知识点:关于斐波拉契数列
可以考虑使用递归:
public static int getNumber(int number){
if(number==1||number==2){
return 1;
}else{
return getNumber(number-1)+getNumber(number-2);
}
}
递归函数:
再程序运行过程中,有时需要调用程序本身,此时可以使用递归
注意:
再程序中,能不使用递归就不要使用递归
使用递归的时候会加大资源的消耗
如果递归的层次比较深,会造成栈溢出。
如果不使用递归无法解决问题的话,就必须要使用递归
比如:输出某个磁盘目录下的所有文件名称
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:11
* @Description:
**/
public class Homework3 {
public static void main(String[] args) {
/* int num1=1;
int num2=1;
// for (int i = 3; i <=12 ; i++) {
// num2+=num1;
// num1=num2-num1;
// }
for (int i = 3; i <=12 ; i+=2) {
num1=num1+num2;
num2=num1+num2;
}
*/
int month=12;
int num2 = getNum(month);
System.out.println("一年内能繁殖"+num2+"对兔子");
}
public static int getNum(int i){
if(i==1 || i==2){
return 1;
}else{
return getNum(i-2)+getNum(i-1);
}
}
}
Test4:任意输入一个整数(小于10位),输出它一共有多少位。
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:30
* @Description:
**/
public class Test4 {
public static void main(String[] args) {
System.out.println("请输入一个整数:");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
// String s = String.valueOf(num);
// System.out.println(s.length());
int count=1;
while(num/10!=0){
num=num/10;
count++;
}
System.out.println("这个数一共"+count+"位");
}
}
Test5:计算1000以内所有不能被7整除的整数之和
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:45
* @Description:
**/
public class Test5 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <1000 ; i++) {
if(i%7!=0){
sum+=i;
}
}
System.out.println(sum);
}
}
Test6:本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:49
* @Description:
**/
public class Test6 {
public static void main(String[] args) {
double money = 10000;
for (int i = 1; i <=5 ; i++) {
money=money*(1+0.003);
}
System.out.println("5年后,获得的本金是"+money);
}
}
Test7:计算 1+2-3+4-5+6-7…+100的结果//注意审题
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:53
* @Description:
**/
public class Test7 {
public static void main(String[] args) {
int sum=1;
for (int i = 2; i <=100 ; i++) {
sum=(i%2==0)?(sum+=i):(sum-=i);
}
System.out.println(sum);
}
}
Test8:一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 16:59
* @Description:
**/
public class Test8 {
public static void main(String[] args) {
double height=0.08;
int count=0;
while (height<=8848.13*1000){
height=height*2;
count++;
}
System.out.println(count+"次对折可以达到或超过珠穆朗玛峰的高度");
}
}
Test9:从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 54321
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 17:08
* @Description:
**/
public class Test9 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.println("请输入一个正整数");
int num = scanner.nextInt();
int sum=1;
for (int i = 1; i <=num ; i++) {
sum=sum*i;
}
System.out.println("阶乘为:"+sum);
}
}
Test10:你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数
import java.util.Scanner;
/**
* @Author: ChaoKeAiMuZhi
* @Date: 2020/7/9 17:13
* @Description:
**/
public class Test10 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int id=0;
int count1=0;
int count2=0;
do{
System.out.println("请输入正整数:");
id = sc.nextInt();
if(id%2==0){
count1++;
}else{
count2++;
}
}while(id!=-1);
System.out.println("偶数的个数为"+count1+",奇数的个数为"+(count2-1));
}
}