第2章 Java基本语法(下): 流程控制--项目(记账本)
2-5 程序流程控制
2-5-1 顺序结构
2-5-2 分支语句1:if-else结构
案例
class IfTest1{
public static void main(String[] args) {
//表现形式一:
int heartBeats = 50;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("请做进一步的心跳检查");
}
System.out.println("体检结束");
//表现形式二:二选一
int age = 23;
if(age > 18){
System.out.println("你可以看小电影了!");
}else{
System.out.println("你先看看动画片,偶像剧");
}
//表现形式三:多选一
if(age < 0){
System.out.println("输入的数据非法");
}else if( age < 18){
System.out.println("青少年时期");
}else if( age < 35){
System.out.println("青壮年时期");
}else if( age < 50){
System.out.println("中年时期");
}else if( age < 80){
System.out.println("老年时期");
}else if(age < 120){
System.out.println("晚年时期");
}else{
System.out.println("你可能不是人类!");
}
}
}
题前补充 补充Scanner
案例
/**
如何从键盘获取不同类型的变量。
解决方法:使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.实例化Scanner
3.调用相关的方法,获取不同类型的变量
//1.导包:import java.util.Scanner;
*/
import java.util.Scanner;
class ScannerTest {
public static void main(String[] args) {
//2.实例化Scanner
Scanner scanner = new Scanner(System.in);
//3.调用相关的方法,获取不同类型的变量
System.out.println("请输入你的姓名:");
String name = scanner.next();
System.out.println(name + "----");
System.out.println("请输入你的年龄:");
int age = scanner.nextInt();
System.out.println("age = " + age);
System.out.println("请输入你的体重:");
double weight = scanner.nextDouble();
System.out.println("weight = " + weight);
System.out.println("你帅吗?(true/false):");
boolean isHandsome = scanner.nextBoolean();
System.out.println("isHandsome = " + isHandsome);
//说明一:
//scanner.nextChar();//Scanner类中没有从键盘获取char的方法!
//说明二:用户输入的变量类型要与调用的方法需要的类型要一致。否则,报InputMismatchException
}
}
例题一
案例
/**
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone7plus;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
说明:1.else结构:可选的。
2.如果两个条件表达式没有公共的交集,此时两个else if结构,可以交换顺序。
如果两个条件表达式有公共的交集,要求将范围小的条件表达式放在范围大的条件表达式的上面,此时两个条件表达式
才有可能都被执行到。
*/
import java.util.Scanner;
class IfTest2{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入岳小鹏的期末成绩:");
int score = s.nextInt();
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score > 80){
System.out.println("奖励一台iphone7plus");
}else if(score >= 60){
System.out.println("奖励一台ipad");
}
/*
else{
System.out.println("什么奖励也没有");
}
*/
}
}
例2
案例
/**
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。
说明:1.if-else可以嵌套使用的
2.如果if-else中的执行语句只有一行,那么可以省略其所在的一对{}
*/
import java.util.Scanner;
class IfTest1 {
public static void main(String [] arguments){
Scanner s = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = s.nextInt();
System.out.println("请输入第一个整数:");
int num2 = s.nextInt();
System.out.println("请输入第一个整数:");
int num3 = s.nextInt();
if(num1>num2){
if(num3>=num1){
System.out.println(num3+"--"+num1+"--"+num2);
}else if(num3<num1){
if(num3>=num2){
System.out.println(num1+"--"+num3+"--"+num2);
}else{
System.out.println(num1+"--"+num2+"--"+num3);
}
}
}else{
if(num1>=num3){
System.out.println(num2+"--"+num1+"--"+num3);
}else if(num3>=num1){
if(num3>=num2){
System.out.println(num3+"--"+num2+"--"+num1);
}else{
System.out.println(num2+"--"+num3+"--"+num1);
}
}
}
}
}
练习一
public class IfExer{
public static void main(String [] args){
/*
int x = 4;
int y = 1;
if (x > 2) {
if (y < 2){
System.out.println(x + y);
}
System.out.println("xxxx");
} else{
System.out.println("x is " + x);
}
//输出xxx
*/
boolean b = true;
if(b == false) //如果写成if(b=false)能编译通过吗?如果能,结果是?
System.out.println("a");
else if(b)
System.out.println("b");
else if(!b)
System.out.println("c");
else
System.out.println("d");
//输出b,换成=号后输出c
}
}
练习二
案例
import java.util.*;
import java.lang.Math;
public class IfTest2{
public static void main(String [] main){
//1题:编写程序,声明2个int型变量并赋值。
//判断两数之和,如果大于等于50,打印“hello world!”
int num1 = 28;
int num2 = 33;
if((num1+num2)>=50){
System.out.println("hello world!");
}
//2题:编写程序,声明2个double型变量并赋值。
//判断第一个数大于10.0,且第2个数小于20.0,打印两数之和
double num3 = 11.12312;
double num4 = 11.22;
if(num3>10.0&num4<20.0){
System.out.println("两个数之和:"+(num3+num4));
}else{
System.out.println("不满足条件");
}
/*3题
求ax2+bx+c=0方程的根。a,b,c分别为函数的参数,如果:b2-4ac>0,
则有两个解;b2-4ac=0,则有一个解;b2-4ac<0,则无解;
提示1:x1=(-b+sqrt(b2-4ac))/2a
X2=(-b-sqrt(b2-4ac))/2a
提示2:Math.sqrt(num);
*/
//double d = Math.sqrt(0.36);
//System.out.println(d);
//System.out.println(Math.max(3,6));
//System.out.println(Math.min(3,6));
Scanner s = new Scanner(System.in);
System.out.println("请输入a:");
double a = s.nextDouble();
System.out.println("请输入b:");
float b = s.nextFloat();
System.out.println("请输入c:");
int c = s.nextInt();
//判断条件
double t = b*b - 4*a*c;
System.out.println("t:"+t);
//如果:b2-4ac>0,则有两个解
if(a!=0){
if(t > 0){
System.out.println("方程有两个解分别为:");
System.out.println("x1: "+ (-b+Math.sqrt(b*b-4*a*c))/2*a);
System.out.println("x2:"+ (-b-Math.sqrt(b*b-4*a*c))/2*a);
}else if(t==0){
System.out.println("方程有一个解为:");
System.out.println("x1=x2 =" + (-b-Math.sqrt(b*b-4*a*c))/2*a);
}else{
System.out.println("方程无解");
}
}else{
//A等于0后是一元一次方程,然后就是-c/b,B不能为0,否则报ArithmeticException
if(b!=0){
System.out.println("方程有一个解:");
System.out.println("x1=x2 =" + -c/b);
}else{
System.out.println("等式不成立");
}
}
}
}
练习3
案例
/**
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,
当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
*/
import java.util.Scanner;
class MarryTest {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入你的身高(cm):");
int height = s.nextInt();
System.out.println("请输入你的财富(千万):");
double wealth = s.nextDouble();
//方式一:
//System.out.println("你帅吗?(true/false):");
//boolean isHandsome = s.nextBoolean();
//方式二:
System.out.println("你帅吗?(是/否):");
String isHandsome = s.next();
if(height >= 180 && wealth >= 1.0 && "是".equals(isHandsome)){
System.out.println("我一定要嫁给他!!!");
}else if(height >= 180 || wealth >= 1.0 || "是".equals(isHandsome)){
System.out.println("嫁吧,比上不足,比下有余。");
}else{
System.out.println("不嫁");
}
}
}
练习4
案例
import java.util.Scanner;
class LotteryTest {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int lotteryNum = (int) (90 * Math.random() + 10);
System.out.println("彩票号是:" + lotteryNum);
int lotteryGe = lotteryNum % 10;
int lotteryShi = lotteryNum / 10;
System.out.println("请输入一个两位数");
int myNum = s.nextInt();
int myGe = myNum % 10;
int myShi = myNum / 10;
if (myNum == lotteryNum) {
System.out.println("奖金10 000美元");
} else if (myShi == lotteryGe && myGe == lotteryShi) {
System.out.println("奖金 3 000美元");
} else if (myShi == lotteryShi || myGe == lotteryGe) {
System.out.println("奖金1 000美元");
} else if(myShi == lotteryGe || myGe == lotteryShi){
System.out.println("奖金500美元");
} else {
System.out.println("彩票作废");
}
}
}
万年历
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
/*做万年历
* 1、请出入年
* 2、判断闰年
* 3、判断月*/
int year;
int month;
int days = 0 ;//保存日期
boolean isRn;//闰年保存true,否则false;
int totalDays =0;
System.out.println("****使用万年历****");
Scanner sc = new Scanner(System.in);
System.out.println("请输入年");
year = sc.nextInt();
System.out.println("请输入月");
month = sc.nextInt();
if((year%400==0)||(year%4==0&&year%100!=0)){
isRn = true;
}else{
isRn = false;
}
if(isRn){
System.out.println(year+"闰年");
}else{
System.out.println(year+"非闰年");
}
//计算年的总天数
for(int i=1900;i<year;i++){
if((i%400==0)||(i%4==0&&i%100!=0)){
totalDays += 366;
}else{
totalDays += 365;
}
}
//计算输入月份之前的天数
for(int i =1;i<=month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 2:
if(isRn){
days=29;
}else{
days=28;
}
break;
case 4:
case 6:
case 9:
case 11:
days =30;
break;
default:
System.out.println("输入有误");
}
// 输入月的天数保存到days中,但没有累加进去
if(i!=month){
totalDays += days;
}
}
// 求出星期几,其实就是前面的\t的个数
int beforeDays;
beforeDays = 1+totalDays%7;
if(beforeDays==7){
beforeDays=0;//代表星期天,0个\t
}
System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for(int i=0;i<beforeDays;i++){
System.out.print("\t");
}
for(int i=1;i<days;i++){
System.out.print(i+"\t");
//满7个换行
if((i+beforeDays)%7==0){
System.out.println();
}
}
}
}
2-5-3 分支语句2:switch-case结构
案例
/**
说明:1.根据case中的情况,选择满足条件的case进入执行其语句。执行完此case中的语句后,仍会继续向下执行其他的
case语句,直到遇到break或者执行完所有的case结束。
2.break:可以使用在switch-case结构中,表示结束当前的switch-case结构。
3.default:是可选的,同时位置是灵活的。
4.switch中的表达式代表的数据类型只能是如下的这些:byte short char int 枚举类的对象 String(jdk7.0新增)
*/
class SwitchTest1 {
public static void main(String[] args) {
int num = 2;
switch(num){
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("other");
break;
}
//*************************
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
//*********如下的情况不可以执行*************
/*boolean isHandsome = true;
switch(isHandsome){
case true:
System.out.println("帅");
break;
case false:
System.out.println("不帅");
break;
}
*/
/*
int age = 23;
switch(age){
case age < 18:
System.out.println("未成年人");
case age >= 18:
System.out.println("成年人");
}
*/
}
}
/*
1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。 String?char
2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
3.根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
4. 编写程序:从键盘上输入2017年的“month”和“day”,要求通过程序输出输入的日期为2017年的第几天。
*/
import java.util.Scanner;
public class SwitchExer1{
public static void main(String [] args){
/*1*/
Scanner s = new Scanner(System.in);
System.out.println("请输入一个字符:");
String str = s.next();
char c = str.charAt(0);
System.out.println(c);
switch(c){
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("OTHER");
break;
}
/*2*/
System.out.println("请输入成绩");
int score = s.nextInt();
switch(score / 10){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
default:
System.out.println("请输入正确的成绩");
break;
}
/*3
根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
*/
System.out.println("请输入月份");
int month = s.nextInt();
switch(month){
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;
case 2:
System.out.println("春节");
case 12:
case 1:
System.out.println("冬季");
break;
}
/*4
编写程序:从键盘上输入2017年的“month”和“day”,
要求通过程序输出输入的日期为2018年的第几天。
*/
System.out.println("请输入月份");
int mm = s.nextInt();
System.out.println("请输入日期");
int dd = s.nextInt();
int sumDays = 0; //记录总天数
/*
if(mm == 1){
sumDays = dd;
}else if(mm == 2){
sumDays = 31 + dd;
}
*/
switch(mm){
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:
sumDays += 28;
case 2:
sumDays += 31;
case 1:
sumDays += dd;
}
System.out.println("2018年"+mm+"月"+dd+"日--是当年的第"+sumDays+"天!");
}
}
案例
/*
编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,
每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、
rooster、dog、pig。
*/
import java.util.Scanner;
public class AnimalTest {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = s.nextInt();
switch(year % 12){
case 0:
System.out.println("monkey");
break;
case 1:
System.out.println("rooster");
break;
case 2:
System.out.println("dog");
break;
case 3:
System.out.println("pig");
break;
case 4:
System.out.println("rat");
break;
case 5:
System.out.println("ox");
break;
case 6:
System.out.println("tiger");
break;
case 7:
System.out.println("rabbit");
break;
case 8:
System.out.println("dragon");
break;
case 9:
System.out.println("snake");
break;
case 10:
System.out.println("horse");
break;
case 11:
System.out.println("sheep");
break;
}
}
}
2-5-4 循环结构
2-5-4 循环结构1:for循环
案例
/*
1.循环结构:在某些条件满足的情况下,反复执行特定代码的功能
2.循环结构的4要素:
①初始化条件
②循环条件 --->boolean类型的结果
③循环体
④迭代条件
当循环条件返回false时,结束循环结构。
3.
for(①;②;④){
③;
}
执行过程:①-②-③-④-②-③-④-②-③-④-.....-②
*/
class ForTest{
public static void main(String[] args) {
/*
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
System.out.println("Hello World!");
*/
for(int i = 1;i <= 5;i++){
System.out.println("Hello World!");
}
//练习1
int a = 1;
for(System.out.print("a"); a <= 3;System.out.print("b"),a++){
System.out.print("c");
}
//输出:acbcbcb
System.out.println();
//练习2:遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
int sum = 0;//记录偶数的总和
int count = 0;//记录偶数的个数
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
System.out.println(i);
sum += i;//累加
count++;
}
}
System.out.println("总和为:" + sum);
System.out.println("偶数的总个数为:" + count);
//System.out.println(i);
}
}
案例
class FooBizBaz{
public static void main(String[] args){
for(int i = 1;i <= 150;i++){
System.out.print(i + "\t");
if(i % 3 == 0 ){
System.out.print("foo" + "\t");
}
if(i % 5 == 0 ){
System.out.print("biz" + "\t");
}
if(i % 7 == 0 ){
System.out.print("baz" + "\t");
}
//换行
System.out.println();
}
}
}
案例
/**
* 1.打印1~100之间所有偶数的和
*/
public class ForExer1 {
public static void main(String[] args) {
int result = 0;
for (int i = 1;i<=100;i++){
if( i % 2 ==0 ){
result += i;
}
}
System.out.println("偶数result:" + result);
int i = 1;
result = 0;
while ( i<=100 ){
if( i % 2 ==0 ){
result += i;
}
i++;
}
System.out.println("偶数result:" + result);
}
}
/**
* 2.打印1~100之间所有是7的倍数的整数的个数及
* 总和(体会设置计数器的思想)
*/
public class ForExer2 {
public static void main(String[] args) {
int count = 0;
int result = 0;
for (int i = 1;i<=100;i++){
if(i%7==0){
count++;
result += i;
}
}
System.out.println("count:" + count);
System.out.println("result:" + result);
}
}
/* 3、输出所有的水仙花数,所谓水仙花数是指一个3 位数,其各个位上数字立方和等于其本身。 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
*/
class FlowerTest {
public static void main(String[] args) {
for(int i = 100;i < 1000;i++){
//获取其各个位上的数值
int i1 = i / 100;//百位
int i2 = (i - 100 * i1) / 10;//十位 i % 100 / 10
int i3 = i % 10;//个位
if(i == i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3){
System.out.println(i);
}
}
}
}
/* 4、输入两个正整数m和n,求其最大公约数和最小公倍数。 */ class NumberTest { public static void main(String[] args) {
int m = 12;
int n = 28;
int min = (m > n)? n : m;//获取两个数中的较小值
int max = (m > n)? m : n;//获取两个数中的较大值
//求最大公约数
for(int i = min;i >= 1;i--){
if(m % i == 0 && n % i == 0){
System.out.println("最大公约数为:" + i);
break;//使用在循环结构中,一旦执行,结束当前循环。
}
}
//最小公倍数
for(int i = max;i <= m * n;i++){
if(i % m == 0 && i % n == 0){
System.out.println("最小公倍数为:" + i);
break;
}
}
}
}
2-5-5 循环结构2:while循环
案例
/*
1.循环结构的4要素:
①初始化条件
②循环条件 --->boolean类型的结果
③循环体
④迭代条件
2.
①
while(②){
③;
④
}
执行过程:①-②-③-④-②-③-④-②-③-④-...-②
3.for循环和while是可以相互转换的!
不同点:关于初始化在出了循环结构以后的调用上:while还可以调用,for不可以调用了。
*/
class WhileTest {
public static void main(String[] args) {
//遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
int i = 1;
int sum = 0;//记录总和
int count = 0;//记录个数
while(i <= 100){
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
//迭代条件
i++;
}
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
System.out.println(i);
}
}
2-5-6 循环结构3:do-while循环
案例
/*
1.循环结构的4要素:
①初始化条件
②循环条件 --->boolean类型的结果
③循环体
④迭代条件
2.do-while结构:
①
do{
③;
④;
}while(②);
执行过程:①-③-④-②-③-④-②-③-④-...②
do-while:至少执行一次循环体!
*/
class DoWhileTest {
public static void main(String[] args) {
int num1 = 10;
while(num1 > 10){
System.out.println("hello1");
num1--;
}
//*************************
int num2 = 10;
do{
System.out.println("hello2");
num2--;
}while(num2 > 10);
//遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
int i = 1;
int sum = 0;
int count = 0;
do{
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
i++;
}while(i <= 100);
System.out.println("总和为:" + sum);
System.out.println("个数为:" + count);
}
}
案例
2
/*
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
说明:1.结束循环结构的方式:①循环条件返回false时 ②在循环体中,满足某个条件的情况下,执行break
2.for(;;) 或 while(true)
*/
import java.util.Scanner;
class ForExer {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int positiveNumber = 0;//记录正数的个数
int negativeNumber = 0;//记录负数的个数
for(;;){
System.out.println("请输入一个整数:(输入为0时结束程序)");
int num = s.nextInt();
if(num == 0){
break;
}else if(num > 0){
positiveNumber++;
}else{
negativeNumber++;
}
}
System.out.println("正数的个数为:" + positiveNumber);
System.out.println("负数的个数为:" + negativeNumber);
}
}
2-5-7 嵌套循环
案例
/*
1.嵌套循环:一个循环结构a,作为另一个循环结构b的循环体出现。
内层循环:循环结构a
外层循环:循环结构b
2.技巧:1)外层循环控制行数,内层循环控制列数。
2)内层循环循环次数为m次,外层循环循环次数n次,则一共需要循环m * n次。
*/
class ForForTest {
public static void main(String[] args){
//******
//System.out.println("******");
for(int i = 1;i <= 6;i++){
System.out.print('*');
}
System.out.println();
/*
******
******
******
******
*/
for(int j = 1;j <= 4;j++){
for(int i = 1;i <= 6;i++){
System.out.print('*');
}
System.out.println();
}
/*
*
**
***
****
*****
*/
for(int j = 1;j <= 5;j++){
for(int i = 1;i <= j;i++){
System.out.print('*');
}
System.out.println();
}
/*
j i i + j == 4
*** 1 3
** 2 2
* 3 1
*/
for(int j = 1;j <= 3;j++){
for(int i = 1;i <= 4 - j;i++){
System.out.print('*');
}
System.out.println();
}
}
}
练习二
打印
----*
---* *
--* * *
-* * * *
* * * * *
* * * *
* * *
* *
*
class ForForExer{
public static void main(String[] args){
/*
从控制台输出:
上半部分: i j- k* j == 5 - i;k == i;
----* 1 4 1
---* * 2 3 2
--* * * 3 2 3
-* * * * 4 1 4
* * * * * 5 0 5
下半部分: i j- k* j == i; k == 5 - i;
* * * * 1 1 4
* * * 2 2 3
* * 3 3 2
* 4 4 1
*/
for(int i = 1;i <= 5;i++){
//-
for(int j = 1;j <= 5 - i;j++){
System.out.print(" ");
}
//*
for(int j = 1;j <= i;j++){
System.out.print("* ");
}
System.out.println();
}
for(int i = 1;i <= 4;i++){
for(int j = 1;j <= i;j++){
System.out.print(" ");
}
for(int k = 1;k <= 5 - i;k++){
System.out.print("* ");
}
System.out.println();
}
}
}
练习三
九九乘法表
/*
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
...
9 * 1 = 9 ... 9 * 9 = 81
*/
class NineNineTable {
public static void main(String[] args) {
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(i + " * " + j + " = " + (i * j) + " ");
}
//换行
System.out.println();
}
}
}
练习四
/*
100以内的所有质数.
质数:只能被1和它本身整除的自然数.--->从2开始,到这个数-1为止的数,都不能被数本身所整除.
比如:2 3 5 7 11 13 17 ...
待优化
*/
class PrimeNumberTest {
public static void main(String[] args) {
//方式一:
//boolean isFlag = true;//标识
for(int i = 2;i <= 100;i++){
//方式二:
boolean isFlag = true;//标识
for(int j = 2;j < i;j++){
if(i % j == 0){
isFlag = false;
}
}
if(isFlag){//if(isFlag == true){
System.out.println(i);
}
//isFlag = true;
}
}
}
2-5-8 特殊关键字的使用:break、continue
案例
/*
适用范围 在循环结构中,表示: 相同点
break switch-case 或 循环结构 结束当前循环 关键字的后面不能有输出语句,编译不通过
continue 循环结构 结束当次循环 关键字的后面不能有输出语句,编译不通过
附加:带标签的break和continue的使用.
*/
class BreakContinueTest {
public static void main(String[] args) {
for(int i = 1;i <= 10;i++){
if(i % 4 == 0){
break;
//continue;
//System.out.println("热巴今晚要约我!!");
}
System.out.print(i);
}
System.out.println("--------");
label:for(int i = 1;i <= 4;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();
}
}
}
项目(家庭记账本)
提供工具类
import java.util.Scanner;
/**
* @author Heaton
* @email tzy70416450@163.com
* @date 2018/9/7 0007 15:22
* @describe public static char readMenuSelection(){}:该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
* public static int readNumber(){}:该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
* public static String readString(){}:该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
* public static char readConfirmSelection(){}:该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
* public static void main(String[]args){}
* 公共的 静态的 没有返回值 如果不是main,这个就不会执行
* 有返回值
*/
public class Utility {
private static Scanner scanner = new Scanner(System.in);
/**
* @param []
* @return char
* @describe 该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
*/
public static char readMenuSelection() {
char c;
//while(true){}
for (; ; ) {
String str = readKeyBoard(1);
c = str.charAt(0);
if (c != '1' && c != '2' && c != '3' && c != '4') {
System.out.println("选择错误,请重新输入");
} else {
break;
}
}
return c;
}
/**
* @param []
* @return int
* @describe 该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
*/
public static int readNumber() {
int n;
for (; ; ) {
try {
String str = readKeyBoard(4);
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.println("数字输入错误,请重新输入:");
}
}
return n;
}
/**
* @param []
* @return java.lang.String
* @describe 该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
*/
public static String readString() {
String str = readKeyBoard(8);
return str;
}
/**
* @param []
* @return char
* @describe 该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
*/
public static char readConfirmSelection() {
char c;
while (true) {
String str = readKeyBoard(1).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.println("选择错误,请重新输入");
}
}
return c;
}
/**
* @param [limit]
* @return java.lang.String
* @describe 从键盘输入一个指定长度的 变量
*/
public static String readKeyBoard(int limit) {
String line = "";
while (scanner.hasNext()) {
line = scanner.nextLine();
if (line.length() < 1 || line.length() > limit) {
System.out.println("输入长度(不能大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
项目实体
/**
* @author Heaton
* @email tzy70416450@163.com
* @date 2018/9/7 0007 16:41
* @describe 家庭记账本
*/
public class FamilyAccount {
public static void main(String[] args) {
String details = "收支\t账户金额\t收支金额\t说 明\n";
int balance = 10000;
boolean loopFlag = true;
do {
System.out.println("-----------------家庭收支记账软件-----------------\n");
System.out.println(" 1 收支明细\n" +
" 2 登记收入\n" +
" 3 登记支出\n" +
" 4 退 出\n");
System.out.println(" 请选择(1-4):");
char key = Utility.readMenuSelection();
switch (key) {
case '1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
break;
case '2':
System.out.println("本次收入金额:");
int amount1 = Utility.readNumber();
System.out.println("本次收入说明:");
String desc1 = Utility.readString();
balance += amount1;
details += "收入\t"+balance+"\t\t"+amount1+"\t\t\t"+desc1+"\n";
System.out.println("本次收入操作成功");
break;
case '3':
System.out.println("本次支出金额:");
int amount2= Utility.readNumber();
System.out.println("本次支出说明:");
String desc2 = Utility.readString();
balance -= amount2;
details += "支出\t"+balance+"\t\t"+amount2+"\t\t\t"+desc2+"\n";
System.out.println("本次支出操作成功");
break;
case '4':
System.out.println("确认是否退出(Y/N):\n");
char yn = Utility.readConfirmSelection();
if (yn == 'Y') {
loopFlag = false;
}
break;
}
} while (loopFlag);
}
}
您的资助是我最大的动力!
金额随意,欢迎来赏!