任何复杂的程序逻辑都可以通过三种结构来实现:
一.顺序结构:从上往下逐行执行,每句必走
二.分支结构:有条件的执行某语句一次,并非每句必走
1.if ... else if结构:多条路
3个数升序排列
package day04;
import java.util.Scanner;
public class Sequence {
public static void main(String[] args) {
/*3.三个数的排序:
int a=8,b=22,c=55; //升序
if(a>b){
int t=a;
a=b;
b=t;
}
if(a>c){
int t=a;
a=c;
c=t;
}
if(b>c){
int t=b;
b=c;
c=t;
}
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
*/
/*
2.两个数的排序:
int a=8,b=55; //升序
if(a>b){
int t=a;
a=b;
b=t;
}
System.out.println("a="+a);
System.out.println("b="+b);
*/
Scanner scan = new Scanner(System.in);
System.out.println("请依次输入三个整数:a,b,c(以空格隔开)");
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
System.out.println("您输入的是:");
System.out.println("a="+a+", b="+b+", c="+c);
int d = 0,e =0, f = 0;
if(a>b) {
d=c>a?b:(c>b?b:c);
e=c>a?a:(c>b?c:b);
f=c>a?c:a;
}else {
d=c>b?a:(c>a?a:c);
e=c>b?b:(c>a?c:a);
f=c>b?c:b;
}
System.out.println("升序排列后结果为:");
System.out.println("a="+d+",b="+e+",c="+f);
scan.close();
}
}
效果如图:
2.switch...case结构:多条路
break;-->跳出循环
优点:效率高、结构清晰
缺点:整数、相等(不能做范围判断)
注意点:(1)在每句分支的后边,都必须跟上break(跳出switch);
(2)case 的value值必须跟switch的参数的类型匹配;
(3)switch后可以跟的数据类型:char,short,byte,
int,String(1.7以后的JDK版本可以用),enum(枚举)
package day04;
import java.util.Scanner;
public class CommandBySwitch {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请选择功能:1.显示全部记录 2.查询登录记录 0.退出");
int command = scan.nextInt();
if(command==1) {
System.out.println("显示全部记录");
}else if(command==2){
System.out.println("查询登录记录");
}else if(command==0) {
System.out.println("欢迎下次再来");
}else {
System.out.println("输入错误");
}
/*switch(command) {
case 1:
System.out.println("显示全部记录");
break;
case 2:
System.out.println("查询登录记录");
break;
case 0:
System.out.println("欢迎下次再来");
break;
default:
System.out.println("输入错误");
break;
}*/
scan.close();
}
}
效果如图:
输入年份和月份得出一个月多少天。
package day04;
import java.util.Scanner;
public class DayOfMonth {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份(例如:2012)");
int year = scan.nextInt();
System.out.println("请输入月份(例如:1)");
int month = scan.nextInt();
boolean flag = (year%4==0 && year%100!=0)||year%400==0;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(year+"年"+month+"月有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(year+"年"+month+"月有30天");
break;
case 2:
if(flag) {
System.out.println(year+"年"+month+"月有29天");
}else {
System.out.println(year+"年"+month+"月有28天");
}
break;
default:
System.out.println("请输入正确的月份:");
break;
}
scan.close();
}
}
效果如图:
三.循环结构:有条件的执行某语句多次,并非每句必走
循环:反复执行一段相同或相似的代码
(1)循环三要素:
循环变量的初始化
循环的条件(以循环变量为基础)
循环变量的改变(向着循环的结束变)
循环变量:在循环过程中所反复改变的那个数
continue只能用于循环中——>其作用为跳过循环体中剩余语句而执行下一次循环
1.for循环(应用率最高,固定次数适用)
for(初始化条件;判断条件;迭代条件(变量的改变);){
执行的语句 -->循环体
}
执行顺序:
第一次执行时,1.初始化条件(只执行一次)
2.判断(boolean)
3.true:进入循环体
false:进不去,结束循环
从第二次循环开始,每次先执行迭代部分,之后再次进入判断部分,
如果判断部分返回true:进入循环体false:跳出循环,结束循环。
类中的内容:
由系统自动生成1-99之间的数,算十组数相加的和,总分100分,算出最后得分,按-1结束答题。
package day05;
import java.util.Scanner;
public class Addition {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int score=0;
for(int i = 1;i<=10;i++) {
int a =(int)(Math.random()*100);
int b =(int)(Math.random()*100);
int sum =a+b;
System.out.println("("+i+")"+a+"+"+b+"=?");
System.out.println("算吧!");
int calculation = scan.nextInt();
if(calculation==-1) {
break;
}
if(calculation==sum) {
score += 10;
System.out.println("答对了!");
}else {
System.out.println("答错了!");
}
}
System.out.println("总分为:"+score);
scan.close();
}
}
效果如图:
2.while结构:(先判断再执行,当...适用)
while循环
初始条件;
while(判断条件){
循环体
迭代部分(变量的改变)
}
类中的内容:
两组求和方法一:
package day05;
import java.util.Scanner;
public class Sum {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
long a = 9l;
long sum1 = 0l;
while(a<=9999999999l) {
sum1 += a;
a=a*10+9;
}
System.out.println("9+99+999+...+9999999999="+sum1);
System.out.println("请输入整数(例如10):");
int n = scan.nextInt();
int b = 1;
double sum2 = 0;
sum2 +=1;
System.out.print(b+"+");
b=2;
while(b<n){
sum2 += 1.0/b;
System.out.print("1/"+b+"+");
b++;
}
sum2 +=1.0/n;
System.out.println("1/"+n+"="+sum2);
scan.close();
}
}
两组求和方法二:
package day05;
import java.util.Scanner;
public class SumFor {
public static void main(String[] args) {
long sum=0,num =9;
for(int i=1;i<=10;i++) {
sum +=num;
num=num*10+9;
}
System.out.println("9+99+999+...+9999999999="+sum);
System.out.println("请输入整数(例如10):");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
double sum1 = 0;
sum1 +=1;
System.out.print("1+");
for(int j = 2;j<n;j++) {
sum1 += 1.0/j;
System.out.print("1/"+j+"+");
}
sum1 +=1.0/n;
System.out.println("1/"+n+"="+sum1);
scan.close();
}
}
效果如图:
3.do...while结构:(先执行再判断,直到...适用)
初始条件;
do{
循环体
迭代部分(变量的改变)
}while(判断条件);
猜系统随机生成的数。
package day05;
import java.util.Scanner;
public class Guessing {
public static void main(String[] args) {
//Math.random()......0.0到0.999999999...
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random()*1000+1);//1到1000之内的随机数
int guess;
do {
System.out.println("猜吧!");
guess = scan.nextInt();
if(guess==0) {
break;
}
if(guess>num) {
System.out.println("太大了!");
}else if(guess<num){
System.out.println("太小了!");
}
}while(guess!=num);
/*System.out.println("猜吧!");
int guess = scan.nextInt();
while(guess!=num) {
if(guess==0) {
break;
}
if(guess>num) {
System.out.println("太大了!");
}else {
System.out.println("太小了!");
}
System.out.println("猜吧!");
guess = scan.nextInt();
}*/
if(guess==num) {
System.out.println("恭喜你,猜对了!");
}else {
System.out.println("下次再来!");
}
scan.close();
}
}
效果如图: