一、顺序
示例
class Test {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
int num3 = num1 + num2;
System.out.println(num3);
}
小结
程序从上到下逐行地执行,中间没有任何判断和跳转。
二、分支
1.if-else
示例1:
import java.util.Scanner;
class IfTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("请输入成绩:(0-100)");
int score = scan.nextInt();
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score <= 99 && score > 80){
System.out.println("奖励一台iphone");
}else if(score <= 80 && score > 60){
System.out.println("奖励一台ipad");
}else{
System.out.println("什么也没有");
}
}
}
示例2:(将输入的三个整数从小到大排列)
import java.util.Scanner;
class IfTest2
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = scan.nextInt();
System.out.println("请输入第二个整数:");
int num2 = scan.nextInt();
System.out.println("请输入第三个整数:");
int num3 = scan.nextInt();
if(num1 >= num2){
if(num3 >= num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else if(num3 <= num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}else{
if(num3 >= num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else if(num3 <= num1){
System.out.println(num3 + "," + num1 + "," + num2);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}
}
}
小结
1.else结构是可选的
2.针对条件表达式:
如果多个表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面没有影响。
如果多个表达式之间有交集的关系,需要根据实际情况排好顺序。
执行一个条件表达式后直接退出,不再执行其他的条件表达式。
3.if-else结构可以互相嵌套,但一般不超过2层
4.当else-if里面只有一条执行语句时,{}可以省略,但不建议。
5.else具有就近原则。
2.switch-case
示例1:
class SwitchCaseTest {
public static void main(String[] args)
{
int number = 2;
switch(number){
case 0:
System.out.println("zero");
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("three");
default:
System.out.println("other");
}
}
}//输出:two three other
小结:
1.根据switch表达式中的值,一次匹配各个case中的常量,一旦匹配成功,则进入相应的case结构中,
当调用完执行语句后,则仍然向下执行其他case结构中的执行语句,知道遇到break关键字或此switch结构末尾结束。
2.break可以用在switch-case结构中,表示跳出。
3.switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型(jdk5.0新增)、string(jdk7.0新增)
4.case之后只能声明变量,不能声明范围。
5.break关键字是可选的。
6.default:
相当于if-else结构中的else
可选的,位置也可以变化,不一定要放在末尾,但一般放在末尾。
示例2:(对学生成绩大于60分的,输出为“合格”,低于60分的,输出“不合格”)
switch(score / 60){
case 0:
System.out.println("不及格");
break;
case 1;
System.out.println("及格");
break;
}
小结:
对于这种switch-case结构中的多个case的执行语句类似时,则可以考虑合并,例如此题可以将分数除以60.
示例3:(从键盘输 入“year”,“month”和“day”,要求通过程序输出输入的日期为那年的第几天。)
import java.util.Scanner;
class SwitchCaseTest2{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年year:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
System.out.println("请输入day:");
int day = scan.nextInt();
int sumDays = 0;//定义一个变量来保存总天数
//方式一:if-else
/*
if(month == 1){
sumDays = day
}else if(month == 2){
sumDays = 31 + day
}else if(month == 3){
sumDays = 31 + 29 + day
}
...
*/舍弃
//方式二:switch-case和方法一类似
/*
switch(month){
case 1:
sumDays = day;
break;
case 2:
sumDays = 31 + day;
...
}
*/舍弃
//更优的方案:
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
//判断是否为闰年
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
sumDays += 29;
}else{
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(year + "年" + month + "月" + day + "是那年的第" + sumDays + "天");
}
}
小结:
1.break是可选的。
2. if-else 可以嵌套在switch-case中。
3.if-else 和switch-case的区别:
凡是可以使用switch-case的结构,都可以转换为if-else。反之不成立
当两者都可以使用,同时case的情况不多时,优先选择switch-case(执行效率略高)
三、循环
1.for
示例1:(遍历100以内的偶数,记录个数,并输出所有偶数的和)
class ForTest{
public static void main(String[] args) {
int count = 0;
int sum = 0;
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
sum += i;
count ++;
}
}
System.out.println("个数为:" + count);
System.out.println("总和为:" + sum);
}
}
/*输出:50
2050
*/
小结:
1.for循环结构的4要素:@1初始化条件
@2循环条件—boolean类型
@3循环体
@4迭代条件
2.for循环结构
for(@1;@2;@4){
@3
}
执行过程:@1-@2-@3-@4-@2-@3-@4-@2-@3-@4----@2-结束
实例2:(从1-150,在每行打印一个值,在每个3的倍数行上打印“foo”,在每个5的倍数行打印“biz”,在每个7的倍数行上打印“baz”)
class ForTest1 {
public static void main(String[] args) {
for(int i = 1;i <= 150;i++){
System.out.print(i + " ");
if(i % 3 == 0){
System.out.print("foo ");
}
if(i % 5 == 0){
System.out.print("biz ");
}
if(i % 7 == 0){
System.out.print("baz");
}
System.out.println();
}
}
}
示例3:(求两个正整数的最大公约数和最小公倍数)
import java.util.Scanner;
class ForTest2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数:");
int m = scan.nextInt();
System.out.println("请输入第二个正整数:");
int n = scan.nextInt();
//获取两个数中的较小值
int min = (m <= n)?m : n;
for(int i = min;i >= 1;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数为:"+ i);
break;
}
}
//获取两个数中的最大值
int max = (m >= n)?m : n;
for(int i = max;i <= m * n;i++){
if( i % m ==0 && i % n == 0){
System.out.println("最小公倍数为:"+ i);
break;
}
}
}
}
示例3:(输出所有的水仙花数,指一位3位数,各个位上的数字立方和等于其本身)
class ForTest3{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
for(int num = 100;num < 1000;num++){
if(num == ((num / 100) * (num / 100) * (num / 100)) + ((num % 100 / 10) * (num % 100 / 10) * ( num % 100 / 10))
+ ((num % 10) * (num % 10) * (num % 10)))
System.out.println(num);
}
}
}
2.while
示例:
class WhileTest {
public static void main(Stri ng[] args){
int i = 0;
while(i <= 100){
if(i % 2 == 0){
System.out.println(i);
}
i++;
}
}
}
小结:
1.while循环的结构
@1
while(@2){
@3;
@4;
}
2.执行过程:@1-@2-@3-@4-@2-@3-@4-@2-@3-@4-…@2
3.如果不写迭代条件@4,可能会导致死循环。
4.for循环和while循环是可以相互转换的。
5.区别:初始化条件部分(@1)的作用域不同.
3.do-while:
示例:(遍历100以内的偶数,并计算所有偶数的个数和偶数的和)
class DoWhileTest {
public static void main(String[] args) {
int num = 0;
int sum = 0;
int count = 0;
do{
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;
}while(num <= 100);
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
}
}
小结:
1.do-while循环结构:
@1
do{
@3;
@4;
}while(@2);
2.执行过程:@1-@3-@4-@2-@3-@4-@2-…@2
3.do-while至少执行一次循环体。