目录
常用的三种方式:顺序结构,分支结构,循环结构
编程技巧
两个编程思想
1)化繁为简︰即将复杂的需求,拆解成简单的需求,逐步完成
2)先死后活︰先考虑固定的值,然后转成可以灵活变化的值
eg:输出一下结构,要求使用for循环
0+5=5
1+4=5
2+3=5
3+2=5
4+1=5
5+0=5
public class ForExercise04{
public static void main(String[] args) {
/*
* 先简后繁 输出i 输出 5-i
* 先死后活 将变量上限常量值5替换成可变值end
*/
int end = 5;
for(int i = 0; i <= end; i++){
System.out.println(i + "+" + (end - i) +"=" + 5);
}
}
}
循序执行
int n1 =1;
int n2 = 2;
int n3 = n1 + n2;//true
//errore
int n1 =1;
int n3 = n1 + n2;
int n2 = 2;
分支结构
包括if分支和switch分支的运用,if分支包括单分支,双分支,多分支的使用,
if循环
基本语法
单分支基本语法
if(条件表达式1){//该值只有是true才能执行条件语句
执行代码;}
双分支基本语法 if-else
if(条件表达式1){//该值只有是true才能执行条件语句
执行代码;}else{
执行代码块2;
}
多分支基本语法if-else if-else
if(条件表达式1){//该值只有是true才能执行条件语句
执行代码;}else if{
执行代码块2;
}else{
执行代码3;
}
注意,多分支可以没有else,如果条件都不成立,则一个执行接口都没有,若有else,如果都不成立,则默认执行else代码块。
练习:接收一个年龄,如果大于18,输出:已经是成年人了,请对自己的行为负责
代码
public class If01{
public static void main(String[] args) {
try (//需求 请输入年龄,如果大于18,输出已经是成年人了,请对自己的行为负责
Scanner myScanner = new Scanner(System.in)) {
System.out.println("请输入年龄");
int age = myScanner.nextInt();
if(age > 18){
System.out.println("已经是成年人了,请对自己的行为负责");
}
}
System.out.println("程序继续。。。");
}
}
多分支练习
接收年龄,并根据年龄和月份判断门票价格,使用if-else if -else结构,注意隐藏条件
4到10月
年龄小于18门票为30;
年龄大于等于18到60门票60;
年龄大于等于60门票为20;
1到3月,11月12月
年龄大于等于18到60门票40;
年龄小于等于18门票为20;
代码
import java.util.Scanner;
public class IfExercsier03 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入月份");
int moth = myScanner.nextInt();
if(moth <=12){
System.out.println("请输入您的年龄");
int age = myScanner.nextInt();
if(moth >=4 && moth <=10){
if(age < 18){
System.out.println("您的票价为30");
}else if (age >= 18 && age <60){
System.out.println("您的票价为60");
}else if (age >=60){
System.out.println("您的票价为20");
}else{
System.out.println("您的年龄有误");
}
}else {
if(age>18 && age < 60){
System.out.println("您的票价为40");
}else if((age>0 && age<=18) ||age>=60 ){
System.out.println("您的票价为20");
}else{
System.out.println("您的年龄有误");
}
}
}else{
System.out.println("请从新输入月份");
}
}
}
switch
基本语法
Switch(接受的变量或者常量){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
case 常量3:
执行语句4;
break;
。。。。
default ://没有花括号
默认实行语句;
}
注意
1.表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的
类型,比如输入的是字符,而常量是int;
2.switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enunn,String)类型
3.case子句中的值必须是常量,而不能是变量;
4.default子句是可选的,当没有匹配的case时,执行default
5. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾(穿透)
练习1:输入一个分数,大于等于60位为合格,小于60分不合格,注意分数区间范围
import java.util.Scanner;
public class SwitchTest02 {
public static void main(String[] args) {
System.out.println("请输入您的分数");
Scanner myScanner = new Scanner(System.in);
int scoin = myScanner.nextInt();
//int soin01 = (int)scoin / 60;
if(scoin <=100 && scoin >=0){
switch((int)scoin / 60){
case 1:
System.out.println("f分数合格");
break;
case 0:
System.out.println("f分数不合格");
break;
}
}
else{
System.out.println("分数无效");
}
}
}
练习2:输入月份判断季节,12 1 2 冬季;3.4.5春季,6.7.8夏季;9.10.11秋季;使用switch
代码
import java.util.Scanner;
public class SwitchTest03 {
public static void main(String[] args) {
System.out.println("请输入月份");
Scanner myScanner = new Scanner(System.in);
int smonth = myScanner.nextInt();
if(smonth >=0 && smonth <=12){
switch(smonth){
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
}
}
else{
System.out.println("您输入的月份不对");//或者使用default
}
}
}
if与switch比较
1.如果判断的具体数值不多,而且符合byte、short, int、char,enum[枚举],String这6种类型。虽然两个语句都可以使用,建议使用swtich语句。
2其他情况:对区间判断,对结果为boolean类型判断,使用if, if的使用范围更广。
循环结构
循环结构简单概述for循环while循环和do_while循环的使用
for循环
基本语法
第一种写法
for(int i = 1(1);i <=10(2);i++(4)){//循环判断条件
执行语句(3);
}
第二种写法
int i = 1;//循环初始值
for(;i <=10;;){//循环判断条件
执行语句;
i++;//循环变量迭代
}
例句
public class ForTest01{
public static void main(String[] args) {
int i = 0;
for(; i <= 10; ){
System.out.println("hello java" + i);
++i;
}
}
注意
1)循环条件是返回一个布尔值的表达式
2) for( ; 循环判断条件 ; )中的初始化和变量迭代可以写到其它地方,但是两边的分
号不能省略。
3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,
循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开。
while循环
基本语法
int i = 1; //变量初始化
while( i <= 10){ // 循环条件
System.out.println("输出语句"); // 循环体
i++; // 循环变量迭代
}
do_while循环
基本语法
int n1 = 1;//变量初始值
do{
循环语句;
循环变量迭代;
}
while(循环条件);
do_while 与 while 的区别类似于,要钱的时候是先揍一顿还是先问的区别
练习:使用do_while循环,要钱,不给就揍,直到还钱为止
import java.util.Scanner;
public class DoWhile01{
public static void main(String[] args) {
//还钱,不还就打
Scanner myScanner = new Scanner(System.in);
char answer = '1';
do{
System.out.println("打一顿");
System.out.println("还钱 y/n");
answer = myScanner.next().charAt(0);
System.out.println("他的回答是" + answer);
}while(answer != 'y');//等于y为假不执行,不等y为真执行,注意y要加''
System.out.println("好,已经还钱" );
}
}
多重循环嵌套
注意
1)将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do...while均可
以作为外层循环和内层循环。(建议一般使用两层,最多不要超过3层,否则,代码的可读性很差)
2)实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为
false时,才会完全跳出内层循环,结束外层的当次循环,开始下一次的循环[听不懂,走案例]。
3)设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
练习:打印九九乘法表
package Five;
public class TimesTable {
public static void main(String[] args) {
// int i = 1;
//int j =1;
int mul = 0;
for( int i = 1; i<= 9; i++){
for( int j = 1; j<= i; j++){
mul = i * j;
System.out.printf(j+"*"+i+"=" +mul+"\t");
}
System.out.printf("\n" );
}
}
}
/*
* 输出结果
*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
*/
注意循环的先后顺数和前后关系,大循环是1-9,小循环为1到大循环的循环条件
练习,键盘接收三个班的分数,计算并输出每个班的总分和平均分,计算年级总和及格人数
public class MulForExercise01 {
public static void main(String[] args) {
//统计三个班的学生的分数并且计算平均分,5个学生;隐藏条件分数有有浮点数
Scanner myScanner = new Scanner(System.in);
//定义基本信息,班级数,每个班人数,班级总分,年级总分,及格人数
int stender = 5;
int classNew = 3;
double sum = 0d;
double sum2 = 0d;
int passNuml = 0;
//循环三个班级
for(int j = 1; j <= classNew; j++){
//接收分数
for(int i =1; i <= stender; i++){
System.out.println("第"+j+"个班的第"+i+"个的学生成绩是");
double score = myScanner.nextDouble();
//对分数处理
if(score >= 60){
passNuml++;
}
sum += score;
System.out.println("您输入第"+j+"个班的第"+i+"个的学生成绩是"+score);
}
sum2 +=sum;
System.out.println("第"+j+"个班的总分是"+sum);
System.out.println("第"+j+"个班的平均分是"+(sum/5));
}
System.out.println("及格人数"+passNuml);
System.out.println("总分是"+sum2);
System.out.println("班级平均分是平均分是"+(sum/(classNew *stender)));
}
}
/*
* 输出结果
* 第1个班的第1个的学生成绩是
70
您输入第1个班的第1个的学生成绩是70.0
第1个班的第2个的学生成绩是
70
您输入第1个班的第2个的学生成绩是70.0
第1个班的第3个的学生成绩是
70
您输入第1个班的第3个的学生成绩是70.0
第1个班的第4个的学生成绩是
70
您输入第1个班的第4个的学生成绩是70.0
第1个班的第5个的学生成绩是
70
您输入第1个班的第5个的学生成绩是70.0
第1个班的总分是350.0
第1个班的平均分是70.0
第2个班的第1个的学生成绩是
50
您输入第2个班的第1个的学生成绩是50.0
第2个班的第2个的学生成绩是
50
您输入第2个班的第2个的学生成绩是50.0
第2个班的第3个的学生成绩是
50
您输入第2个班的第3个的学生成绩是50.0
第2个班的第4个的学生成绩是
50
您输入第2个班的第4个的学生成绩是50.0
第2个班的第5个的学生成绩是
50
您输入第2个班的第5个的学生成绩是50.0
第2个班的总分是600.0
第2个班的平均分是120.0
第3个班的第1个的学生成绩是
80
您输入第3个班的第1个的学生成绩是80.0
第3个班的第2个的学生成绩是
80
您输入第3个班的第2个的学生成绩是80.0
第3个班的第3个的学生成绩是
80
您输入第3个班的第3个的学生成绩是80.0
第3个班的第4个的学生成绩是
80
您输入第3个班的第4个的学生成绩是80.0
第3个班的第5个的学生成绩是
80
您输入第3个班的第5个的学生成绩是80.0
第3个班的总分是1000.0
第3个班的平均分是200.0
及格人数10
总分是1950.0
班级平均分是平均分是66.66666666666667
PS F:\Code\122Java>
*/
打印一个等腰三角形
//打印一个空心等腰三角
package Five;
public class TotalExercise01 {
public static void main(String[] args) {
int totalleave = 8;//层数
for(int i = 1; i <= totalleave; i++){
//控制每层前面空格
for(int k = 1; k <= totalleave - i ; k++){
System.out.print(" ");
}
//实现每层的小点输出 空格数+第一个小点+中间空格+最后一个小点
//最后一个层数是最后的时候全部输出
for(int j = 1; j <=2 * i-1;j++){
if(j == 1 || j==2 * i - 1 || i == totalleave){
System.out.print("*");
}
else{
System.out.print(" ");
}
//System.out.print("*");
}
System.out.print("\n");
}
System.out.print("\n");
System.out.print("\n");
//倒立等腰三角形
for(int i = 1; i <= totalleave; i++){
//输入空格
for(int j = 1; j < i; j++){
System.out.print(" ");
}
//输入*和空格
for(int k = 1; k <= (totalleave - i) * 2 + 1 ;k++){
if(k ==1 || k == (totalleave - i) * 2 + 1 || i == 1){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.print("\n");
}
}
}
/*
*
*
* *
* *
* *
* *
* *
* *
***************
***************
* *
* *
* *
* *
* *
* *
*
*/
break,continue,return
break
终止某个循环语块的执行,一般使用switch ,for ,while等,
结合标签使用;
package Five;
public class break01 {
public static void main(String[] args) {
int i = 0;
for( ; i <= 6; i++){
if(i ==3){
break;
}
System.out.println("i = " + i);
}
System.out.println("程序执行完毕,i = " + i);
}
}
/*
* 输出结果
*
i = 0
i = 1
i = 2
程序执行完毕,i = 3
*/
随机数生成
java文档查看math.random()的使用
package Five;
public class MathRandom01 {
public static void main(String[] args) {
int n = 0;
int count = 0;
while ( true){
n = (int)(Math.random() *100 + 1);
System.out.println(n);
count++;
if(n == 97){
break;
}
}
System.out.println("第"+count+"输出97");
}
}
continue持续输出
跳过初始变量直接进入循环内部,执行变量迭代语句
return
执行该语句时,是main中退出程序,是方法退出方法