流程控制语句
1.顺序结构
代码从主函数开始逐行向下运行,简单的来说就是按顺序运行。顺序结构是一种宏观的代码运行结构。
2.选择结构
if语句
(1)单分支 if 语句
单分支 if 语句是指当且仅当条件为 true 时执行一个动作 。
单分支 if 语句的语法如下:
if ( 布尔表达式 ){
语句( 组);
}
if语句:计算机在执行时先判断布尔表达式是否为真,为真时执行if中的语句。如图所示
流程图:
举个例子说明下:
/*
数据:整数 5 2
步骤:
1输入一个整数
2判断该数字如果是5的倍数,打印HiFive;如果被 2 整除,打印 Hi Even。
*/
class Demo00{
public static void main(String[] args){
//1
Scanner input = new Scanner(System.in);
System,out.println ("请输入一个整数:");
int number = input.nextlnt;
//2
if (number % 5 == 0)
System.out.println("HiFive");
if (number % 2 == 0)
System.out. println("HiEven");
}
}
(2)双分支 if-else 语句
双分支 if 语句的语法如下:
if (布尔表达式){
语句(组);
}else{
语句;
}
if-else语句:如果布尔表达式的计算结果为 true, 则执行条件为 true 时该执行的语句;否则,执行条件为 false 时该执行的语句。通俗的说就是如果满足这个条件则执行if中的语句,否则就执行else中的语句。
流程图:
/*
数据:整数 2
步骤:
1输入一个整数
2判断 这个数对2求余数余数为0是偶数否则是奇数
*/
class Demo00{
public static void main(String[] args){
//1
Scanner input = new Scanner(System.in);
System.out.printl n ("请输入一个整数:");
int number = input.nextInt();
//2
if(number % 2 == 0){
System.out.printl("这个数是偶数");
}else
System.out.println("这个数是奇数数");
}
}
(3)嵌套的 if 语句
if(条件1){
条件1为true时执行的代码;
if(条件2){
条件2为true时执行的代码;
}else{
条件2为false时执行的代码;
}
}else{
条件1为false时执行的代;
}
嵌套的 if 语句:就是if-else中在有个if-else:判断方式和if-else一致,只不过是多来几次。
举个例子说明下:
/*
数据:i j k
步骤:
1.判断i,j,k
2.输出结果
*/
class Demo00{
public static void main(String[] args){
public static void main(String[] args) {
int i = 3;
int j = 6;
int k = 10;
1f(i > k){
if (j > k)
System.out.println("i and» j are greater than k");
}else
System.out.println("i is less than or equal to kM);
}
}
多分支 if - else 语句
if(条件1){
}else if(条件2){
语句;
}else if(条件3){
语句;
}else{
语句;
}
举个例子说明下:
流程图:
/*
数据:整数
步骤:
1输入一个整数
2对这个数判断
3输出成绩
*/
class Demo00{
public static void main(String[] args){
public static void main(String[] args) {
//1
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
double score = input.nextDouble();
//2
if (score >= 90.0)
System.out.print("AM");
else
if (score >= 80.0)
System.out.print("B");
else
if(score >= 70.0)
System.out.print("C");
else
if (score >= 60.0)
System.out.print("D");
else
System.out.print("F");
}
}
switch语句
switch语句一般在多选情况下用
switch(变量){
case 值1: 执行语句1:break;
case 值2: 执行语句2: break;
case 值3:执行语句3; break;
deafult: 执行语句n:break;
}
switch语句遵循:
(1) switch 表达式必须能计算出一个 char 、 byte 、 short , int 或者 String 型值 , 并且必 须总是要用括号括住。
(2) 当 switch 表达式的值与 case 语句的值相匹配时 , 执行从该 case 开始的语句 , 直到遇到一个 break 语句或到达该 switch 语句的结束 。
(3) 默认情况 ( default ) 是可选的 , 当没有一个给出的 case 与 switch 表达式匹配时 , 用来执行该操作。
(4) 关键字 break 是可选的 。 break 语句会立即终止 switch 语句 。
流程图:
举个例子说明下:
/*
数据:电脑随机产生的一个数字com 用户输入的一个数字usr
0 1 2
剪刀 石头 布
步骤:
1.提示用户输入一个数字
2.计算机随机产生一个数字
3.将两个数字进行对比,分输赢
平局 com==usr
用户赢 usr=0 com=2 | usr=1 com=0 | usr=2 com=1
用户输 剩下的都是用户输
随机数
Math.random() [0,1.0)*3 -> [0,3.0)->(int)[0,3.0)
Random nextInt(n)
*/
import java.util.*;
class Demo03_06{
public static void main(String[] args){
//1.
Scanner scanner=new Scanner(System.in);
System.out.print("请输入 剪刀0 石头1 布2:");
int usr=scanner.nextInt();
//2.
Random random=new Random();
int com=random.nextInt(3);
String usrStr="";
String comStr="";
switch(usr){
case 0: //if usr==0
usrStr="剪刀";
break;
case 1:// if usr==1
usrStr="石头";
break;
case 2:// if usr==2
usrStr="布";
break;
}
switch(com){
case 0:
comStr="剪刀";
break;
case 1:
comStr="石头";
break;
case 2:
comStr="布";
break;
}
//3.
if(usr==com){
System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
}else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
}else{
System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
}
}
}
3.循环结构
循环结构的作用:主要解决重复性执行的代码。
一般来说 如果已知重复次数的循环 ,使用for循环;不知重复次数但是已知结束条件的循环,用while循环。
循环的四要素
(1)循环初始化。 指的就是循环从什么时候开始执行,从哪开始执行
(2)循环继续条件。 什么情况循环继续执行/反过来说,循环何时结束
(3)循环体。 就是我们需要被多次循环执行的代码块
(4)循环的周期。步长,间距 当前循环和下一次循环之间的变更
举个例子说明下:
比如说 向前走10步:其中循环初始化是 刚开始的第1步,也就是第0步;循环继续条件是当前的步数有没有到是10;循环体是向前走1步;循环的周期是当前步数与下一个步数的间。
再比如说 向前走直到碰墙为止:其中循环初始化是 刚开始的第1步,也就是第0步;循环继续条件是是否碰墙;循环体是向前走1步;循环的周期是当前步数与下一个步数的间隔是1。
while循环
while 循环的语法如下 :
while( 循环继续条件){
// 循环体
语句;
}while 循环 先对循环继续条件判断,是真则继续执行循环体为假则不执行,执行后结束条件是循环继续条件为假。
循环设计策略
一个正确的循环对编程新手来说 , 并不是件容易的事 。 编写循环时应该考虑如下三 个步骤:
第一步 : 确定需要重复的语句 。
第二步 : 将这些语句放在一个循环中 , 如下所示 :
while ( true ) {
语句组 ;
}
第三步 : 为循环继续条件编码 , 并为控制循环添加适合的语句 。
while ( 循环继续条件 ) {
语句组 ;
用于控制循环的附件语句 ;
}
while 循环
举个例子说明下:
/*
数据:sum i
步骤:
1.定义
2.计算从1加到10
3.输出
*/
Class Demo03_08{
public static void main(String[] args){
//1.
int sum = 0;
int i = 1;
//2/
while (i < 10){
sum = sum + 1;
i++;
}
3.//
System.out.println("sum=" + sum);
}
}
while循环的死循环示例:
class Test01{
public static void main(String[] args){
//计算1+2+3+....+99+100
//正常
int sum=0;
int i=1; //1.循环初始化
while(i<=100){ //2.循环的继续条件
sum=sum+i; //3.循环体
i++; //4.循环的步长
}
System.out.println(i);
System.out.println(sum);
//死循环:循环一直不出来 CPU在一直执行循环体
while(true){ //此处必须写条件表达式
System.out.println("while死循环");
}
}
}
for循环
for循环的书写:
for(1循环的初始化 ; 2循环的继续条件 ; 4循环的步长 ){3循环体
}
执行顺序:1-2-3-4-2-3-4-2-3-4-2-3-4 一直到2不满足位置结束
for循环流程图:
举例说明:
class Test02{
public static void main(String[] args) {
int sum=1;
//前100个数相乘
for (int i=1; i <= 100; i++) {
sum = sum * sum;
}
System.out.println("结果是:" + sum);
}
}
for循环嵌套
for(循环的初始化 ; 循环的继续条件 ; 循环的步长 ){
for(循环的初始化 ; 循环的继续条件 ; 循环的步长 ){
循环体;
}
}for循环嵌套:其实就是第二个for是第一个循环体。
举个例子说明下:
class sdfg{
public static void main(String[] args) {
//1打印出1-9 9个数字
for (int j = 1;j <= 9;j++){
System.out.print(" "+ j);
}
System.out.println("\n --------------------------------");
//2打印的数是行数*列数
for (int i = 1;i <= 9;i++){
System.out.printf("");
for (int j = 1;j <= 9;j++){
System.out.printf("%4d", i * j);
}
System.out.println();
}
}
}
结果:
/*
结果是:
1 2 3 4 5 6 7 8 9
------------------------------------
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
*/
for循环死循环示例:
for(;;){ //循环的初始化 ; 循环的继续条件 ; 循环的步长 都可以为空
System.out.println("for死循环");
}
习题练习
1
/*
数据:a b c delt r1 r2
步骤:
1.提示用户输入abc三个参数
2.计算delt=b*b-4*a*c
3.判断delt的值
3.1 delt>0
输出两个解
3.2 delt==0
输出一个解
3.3 delt<0
无实数解
*/
import java.util.Scanner;
class Demo03_01{
public static void main(String[] args){
//1.提示用户输入abc三个参数
Scanner scanner=new Scanner(System.in);
System.out.print("请输入a,b,c:");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
//2.计算delt=b*b-4*a*c
double delt=b*b-4*a*c;
//3.判断delt的值
if(delt>0){
double r1=(-b+Math.sqrt(delt))/(2*a);
double r2=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
}else if(delt==0){
double r=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r=%.2f",r);
}else{
System.out.println("无实数解!");
}
}
}
2
/*
数据:a b c d e f
步骤:
1.输入数值
2.判断k的值
3.计算x y
*/
import java.util.Scanner;
public class Text02 {
public static void main(String [] args) {
//1.输入数值
Scanner input = new Scanner(System.in);
System.out.print("请输入a、b、c、d、e、f的值:");
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble();
double d = input.nextDouble();
double e = input.nextDouble();
double f = input.nextDouble();
//2.判断k的值
double k = a * d - b * c ;
if(k == 0)
System.out.println("无结果 ");
else {
//3.计算x y
double x = (e * d - b * f)/(a * d - b * c);
double y = (a * f - e* c)/(a * d - b * c);
System.out.println("x的值:" + x +"y的值:" + y);
}
}
}
3
/*
数据:今天的周几 未来的天数 未来的周几
(0+12)%7=5
(4+4)%7=1
(今天的周几+未来的天数)%7=未来的周几
1月1日是周一 1%7=1
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20
1月20日 20%7=6
步骤:
1.输入今天是周几
2.输入未来的几天
3.打印未来的几天是周几
*/
import java.util.Scanner;
class Demo03_03{
public static void main(String[] args){
//1.输入今天是周几
Scanner scanner=new Scanner(System.in);
System.out.print("今天是周几:");
int today=scanner.nextInt();
//2.输入未来的几天
System.out.print("未来的几天:");
int future=scanner.nextInt();
//3.打印未来的几天是周几
int futureDay=(today+future)%7;
String todayStr="";
String futureDayStr="";
if(today==0){
todayStr="周日";
}else if(today==1){
todayStr="周一";
}else if(today==2){
todayStr="周二";
}else if(today==3){
todayStr="周三";
}else if(today==4){
todayStr="周四";
}else if(today==5){
todayStr="周五";
}else if(today==6){
todayStr="周六";
}
if(futureDay==0){
futureDayStr="周日";
}else if(futureDay==1){
futureDayStr="周一";
}else if(futureDay==2){
futureDayStr="周二";
}else if(futureDay==3){
futureDayStr="周三";
}else if(futureDay==4){
futureDayStr="周四";
}else if(futureDay==5){
futureDayStr="周五";
}else if(futureDay==6){
futureDayStr="周六";
}
System.out.println("今天是"+todayStr+",未来的日子是"+futureDayStr);
}
}
4
/*
数据:num
步骤:
1.输入一个数字
2.拼接出该数字的反序
3.输出
12345
12345%10=5 12345/10=1234
1234%10=4 1234/10=123
123%10=3 123/10=12
12%10=2 12/10=1
1%10=1 1/10=0
54321
5*10000+4*1000+3*100+2*10+1
(5*1000+4*100+3*10+2)*10+1
((5*100+4*10+3)*10+2)*10+1
(((5*10+4)*10+3)*10+2)*10+1
((((0*10+5)*10+4)*10+3)*10+2)*10+1
sum=0
sum=sum*10+5; //5
sum=sum*10+4; //54
sum=sum*10+3; //543
sum=sum*10+2; //5432
sum=sum*10+1; //54321
*/
import java.util.Scanner;
class Demo03_04{
public static void main(String[] args){
//1.输入一个数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
int temp=num;
//2.拼接出该数字的反序
int sum=0;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
sum=sum*10+num%10;
num/=10;
if(sum==temp){
System.out.println("是回文");
}else{
System.out.println("不是回文");
}
}
}
5
/*
数据:电脑随机产生的一个数字com 用户输入的一个数字usr
步骤:
1.提示用户输入一个两位数字
2.计算机随机产生一个两位数字
3.将每个数字拆开,分别进行对比,分输赢
a=usr%10; b=usr/10; c=com%10; d=com/10
*/
import java.util.*;
class Demo03_05{
public static void main(String[] args){
//1.提示用户输入一个两位数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入 一个数:");
int usr=scanner.nextInt();
//2.计算机随机产生一个两位数字
Random random=new Random();
int com = random.nextInt(99);
String.format("%02d",usr);
int m = usr;
int n = com;
//3.将每个数字拆开,分别进行对比,分输赢
int a=m%10;
int b=m/10;
int c=n%10;
int d=n/10;
if(usr == com){
System.out.println("奖金10000美元");
}else if(a==d&&b==c){
System.out.println("奖金300美元");
}else
if(a==c||a==d||b==c||b==d){
System.out.println("奖金1000美元");
}else{
System.out.println("没有获奖");
}
}
}
6
/*
数据:电脑随机产生的一个数字com 用户输入的一个数字usr
0 1 2
剪刀 石头 布
步骤:
1.提示用户输入一个数字
2.计算机随机产生一个数字
3.将两个数字进行对比,分输赢
平局 com==usr
用户赢 usr=0 com=2 | usr=1 com=0 | usr=2 com=1
用户输 剩下的都是用户输
随机数
Math.random() [0,1.0)*3 -> [0,3.0)->(int)[0,3.0)
Random nextInt(n)
*/
import java.util.*;
class Demo03_06{
public static void main(String[] args){
//1.提示用户输入一个数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入 剪刀0 石头1 布2:");
int usr=scanner.nextInt();
//2.计算机随机产生一个数字
Random random=new Random();
int com=random.nextInt(3);
String usrStr="";
String comStr="";
switch(usr){
case 0: //if usr==0
usrStr="剪刀";
break;
case 1:// if usr==1
usrStr="石头";
break;
case 2:// if usr==2
usrStr="布";
break;
}
switch(com){
case 0:
comStr="剪刀";
break;
case 1:
comStr="石头";
break;
case 2:
comStr="布";
break;
}
//3.将两个数字进行对比,分输赢
if(usr==com){
System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
}else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
}else{
System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
}
}
}
7
/*
数据:星期几 h 某月的第几天 q 月份m 世纪数 j 该世纪第几年k 年份year
步骤:
1.提示用户输入年份,月份,日期
2.若月份为1月2月则m=13 14 year=year-1
3.计算星期hj
*/
import java.util.Scanner;
class Demo03_07{
public static void main(String[] args){
//1.提示用户输入年份,月份,日期
Scanner scanner=new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份1-12:");
int m = scanner.nextInt();
System.out.print("请输入日期1-31:");
int q = scanner.nextInt();
//2.若月份为1月2月则m=13 14 year=year-1
if(m == 1 || m == 2){
year = year - 1;
m = m + 12;
}
//3.计算星期hj
int h =(day+26*(month+1)/10+year%100+year%100/4+year/100/4+5*year/100)%7;
String hStr="";
switch(h){
case 0:
System.out.println("今天是星期日");
break;
case 1:
System.out.println("今天是星期一");
break;
case 2:
System.out.println("今天是星期二");
break;
case 3:
System.out.println("今天是星期三");
break;
case 4:
System.out.println("今天是星期四");
break;
case 5:
System.out.println("今天是星期五");
break;
case 6:
System.out.println("今天是星期六"—);
break;
}
}
}
8
/*
数据:圆的圆心 圆的半径 点的坐标 距离
步骤:
1.提示用户输入点的坐标
2.计算点到圆心之间的距离
3.判断距离和半径之间的关系
距离>半径 点在圆外
距离==半径 点在圆上
距离<半径 点在圆内
*/
import java.util.Scanner;
class Demo03_08{
public static void main(String[] args){
//1.提示用户输入点的坐标
Scanner scanner=new Scanner(System.in);
System.out.print("请输入坐标点:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
//2.计算点到圆心之间的距离
double xo=0;
double yo=0;
double radius=10;
double distance=Math.sqrt(Math.pow(x-xo,2)+Math.pow(y-yo,2));
//3.判断距离和半径之间的关系
if(distance>radius){
System.out.println("点在圆外");
}else if(distance==radius){
System.out.println("点在圆上");
}else{
System.out.println("点在圆内");
}
}
}
9
/*
数据:三角形的三个顶点的坐标
步骤:
1.提示用户输入一个点的坐标
2.先大致判断一下坐标的范围
3.再精确的判断坐标的范围
*/
import java.util.Scanner;
class Demo03_09{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入一个点的坐标
System.out.print("请输入一个坐标:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
//2.先大致判断一下坐标的范围
//3.再精确的判断坐标的范围
if(x>=0&&x<=200&&y<=-0.5*x+100){
System.out.println("点再三角形内");
}else{
System.out.println("点再三角形外");
}
}
}
10
/*
数据:大矩形的中点坐标、宽、高;小矩形的宽、高、中点坐标
步骤:
1.先输入大矩形的中心,宽和高
2.再输入小矩形的中心,宽和高
3.找小矩形在大矩形中极限
4.找小矩形与大矩形重叠的极限
*/
import java.util.Scanner;
class Demo03_10{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.先输入大矩形的中心,宽和高
System.out.print("请输入第1个矩形的信息:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double w1=scanner.nextDouble();
double h1=scanner.nextDouble();
//2.再输入小矩形的中心,宽和高
System.out.print("请输入第2个矩形的信息:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double w2=scanner.nextDouble();
double h2=scanner.nextDouble();
//3.找小矩形在大矩形中极限
double inXMin=x1-(w1-w2)/2;
double inXMax=x1+(w1-w2)/2;
double inYMin=y1-(h1-h2)/2;
double inYMax=y1+(h1-h2)/2;
//4.找小矩形与大矩形重叠的极限
double outXMin=x1-(w1+w2)/2;
double outXMax=x1+(w1+w2)/2;
double outYMin=y1-(h1+h2)/2;
double outYMax=y1+(h1+h2)/2;
if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
System.out.println("小矩形在大矩形里面!");
}else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
System.out.println("小矩形在大矩形外面!");
}else{
System.out.println("小矩形和大矩形相交!");
}
}
}
11
/*
数据:输入de数字
1.输入一个数字
2.再判断数字是否为0如果为0则退出不是则继续
3.计算总和,正的数的个数,负的数个数,平均值
*/
import java.util.Scanner;
class Demo03_11{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
double sum=0; //总和
int positives=0; //正数的个数
int negatives=0; //负数的个数
//1.输入一个数字
System.out.print("请输入若干数字:");
while(true){ //不管三七二十一 先进来再说
int num=scanner.nextInt();
//2.再判断数字是否为0如果为0则退出不是则继续
if(num!=0){
sum+=num;
if(num>0){
positives++;
}else{
negatives++;
}
}else{
break; //跳出当前循环
}
}
//3.
if(positives+negatives==0){
System.out.println("没有其他数字的输入,除了0");
}else{
System.out.println("正数的个数"+positives);
System.out.println("负数的个数"+negatives);
System.out.println("总和"+sum);
System.out.println("平均值"+sum/(positives+negatives));
}
}
}
12
/*
数据:n1 n2 gcd
步骤:
1.输入两个数字
2.检查是否为公约数
3.输出最大公约数gcd
*/
import java.util.Scanner;
class Demo03_12{
/*
21 42
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16~21
3 7
*/
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.输入两个数字
System.out.print("请输入两个数字:");
int n1=scanner.nextInt();
int n2=scanner.nextInt();
//2.检查是否为公约数
int gcd=1;
for(int i=n1<n2?n1:n2;i>=1;i--){
if(n1%i==0&&n2%i==0){
gcd=i;
break;
}
}
//3.输出最大公约数
System.out.println(gcd);
}
}
13
/*
120 2~120 ->2
60 2~60 ->2
30 2~30 ->2
15 2~15 ->3
5 2~5 ->5
1
*/
import java.util.Scanner;
class Demo03_13{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
while(true){
for(int i=2;i<=num;i++){
if(num%i==0){
System.out.print(i+" ");
num=num/i;
break;
}
}
if(num==1){
break;
}
}
}
}
14
/*
数据:给出的数字模型
1.for循环每个的行数
2.for循环没行的空隔
3.for循环每行的列数
分析
4 3 2 1 2 3 4
-3 -2 -2 0 1 2 3
第4行 x∈[-3,3] y=|x|+1
第5行 x∈[-4,4] y=|x|+1
*/
import java.util.Scanner;
class Demo03_14{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入行数:");
int line=scanner.nextInt();
for(int i=1;i<=line;i++){ //行数
for(int k=1;k<=(line-i);k++){ //空格
System.out.print(" ");
}
for(int x=-(i-1);x<=i-1;x++){ //列
if(line<10){
System.out.printf("%-2d",Math.abs(x)+1);
}else{
System.out.printf("%-3d",Math.abs(x)+1);
}
}
System.out.println();
}
}
}
15
/*
数据:给出的数字模型
步骤:
1.for循环每个的行数
2.for循环每行的列数
*/
class Demo03_15{
public static void main(String[] args){
//第一个
for(int i=1;i<=6;i++){ //行数
for(int j=1;j<=i;j++){ //列
System.out.print(j+" ");
}
System.out.println();//换行
}
//第二个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int j=1;j<=7-i;j++){ //列
System.out.print(j+" "); //输出数字
}
System.out.println(); //换行
}
//第三个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int k=1;k<=6-i;k++){ //空格数
System.out.print(" ");
}
for(int j=i;j>=1;j--){
System.out.print(j+" "); //输出数
}
System.out.println();///换行
}
//第四个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int k=1;k<=i-1;k++){ //每行空格数
System.out.print(" "); //列
}
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
}
}
16
/*
数据:数据:给出的数字模型
1.for循环每个的行数
2.for循环没行的空隔
3.for循环每行的列数
分析:
第4行
1 2 4 8 4 2 1
0 1 2 3 2 1 0
x -3 -2 -1 0 1 2 3
第5行
1 2 4 8 16 8 4 2 1
0 1 2 3 4 3 2 1 0
x -4-3-2-1 0 1 2 3 4
*/
class Demo03_16{
public static void main(String[] args){
for(int i=1;i<=8;i++){
for(int k=1;k<=8-i;k++){
System.out.print(" ");
}
for(int x=-(i-1);x<=i-1;x++){
System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
}
System.out.println();
}
}
}
/*
提示:
对于打印一些对称性的三角形图案或者是类似的问题
尽量向绝对值考虑
*/
17
/*
思路分析:
素数就是这个数从2开始一直到除自己以外的数相除有余数
*/
class Demo03_17{
public static void main(String[] args){
int count = 0; //标记素数的个数
for(int num = 2;num <= 1000;num++){ //2-1000的数
boolean flag = true; //对这个数标记,一开始为true
for(int i = 2;i <= num - 1;i++){
if(num % i == 0){
flag = false; //不是素数为false
break;
}
}
if (flag){
count++;
System.out.println(num); //输出素数
if(count%8 == 0){ //一行输出8个数
System.out.println();
}
}
}
}
}
18
/*
数据: pi i 公式
步骤:
1.输入i的值
2.将重复运算的用for语句
2.输出pi的值
*/
import java.util.Scanner;
class Demo03_18{
public static void main(String[] args){
//1.输入i的值
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int i = scanner.nextInt();
double pi = 0;
int flag = 1;
//2.将公式重复运算的用for语句
for(int j = 1;j <= 2 * i - 1;j++){
pi = pi + (flag / (2 * j - 1);
flag = -flag;
}
pi = 4 * pi;
//3.输出pi的值
System.out.println(" "+pi);
}
}
19
/*
数据:输入的数
步骤:
1.提示输入数字
2.循环检查最大数,并计数,数字为0,结束循环
3.输出最大的数并且输出有多少个
*/
import java.util.Scanner;
class Demo03_24{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int num=0;
int max=0;
int count=0;
//1.提示输入数字
System.out.print("请输入数字:");
//2.循环检查最大数,并计数
while(true){
num=scanner.nextInt();
if(num==0){
break; //数字为0,结束循环
}else if(num>max){ //找最大数
max=num;
count=1;
}else if(num==max){ //计数
count++;
}
}
//3.输出最大的数并且输出有多少个
System.out.println("max="+max+",count="+count);
}
}
20
/*
思路分析:
闰年是能对4整除不能对100整除或者能对400整除
*/
class Demo03_20{
public static void main(String[] args){
int count=0; //标记闰年的个数
for(int i = 101;i <=2100;i++){ //求从101-2100的数
if( i % 4 == 0 && i % 100 != 0 || i %400 == 0){
count++;
System.out.print(i+" "); //输出闰年
if(count % 10 == 0){ //一行输出10个数
System.out.println();
}
}
}
System.out.println("\n闰年一共有" + count +"个");//闰年个数
}
}
21
/*
思路分析:
6 1 2 3 4 5 6
28 1 2 4 7 14
n 1~n/2
*/
import java.util.Scanner;
class Demo03_21{
public static void main(String[] args){
int s=0;
for(int j=2;j<=10000;j++){
for(int i=1;i<=j/2;i++){
if(j%i==0){
s=s+i;
}
}
if(j==s){
System.out.print(" "+j);
}
s=0;
}
}
}
22
/*
数据:电脑随机产生的一个数字com 用户输入的一个数字usr
0 1 2
剪刀 石头 布
步骤:
1.提示用户输入一个数字
2.计算机随机产生一个数字
3.将两个数字进行对比,分输赢
平局 com==usr
用户赢 usr=0 com=2 | usr=1 com=0 | usr=2 com=1
用户输 剩下的都是用户输
随机数
Math.random() [0,1.0)*3 -> [0,3.0)->(int)[0,3.0)
Random nextInt(n)
*/
import java.util.*;
class Demo03_22{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int count = 0;
int flag = 0;
while(true){ //循环进行
System.out.print("请输入 剪刀0 石头1 布2:");
int usr=scanner.nextInt();
Random random=new Random();
int com=random.nextInt(3);
String usrStr="";
String comStr="";
switch(usr){
case 0: //if usr==0
usrStr="剪刀";
break;
case 1:// if usr==1
usrStr="石头";
break;
case 2:// if usr==2
usrStr="布";
break;
}
switch(com){
case 0:
comStr="剪刀";
break;
case 1:
comStr="石头";
break;
case 2:
comStr="布";
break;
}
if(usr==com){
System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
}else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
count++;
}else{
System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
flag++;
}
if(count==2||flag ==2){ //电脑或用户赢两次后退出循环
break;
}
}
if(count==2){
System.out.printf("用户赢");
}else{
System.out.printf("用户输");
}
}
}
23
/*
数据:输入的数
步骤:
1.提示输入数字
2.循环对二求余数,并赋予字符串binStr
3.输出binStr
思路分析:
12/2 6 ~ 0
6/2 3 ~ 0
3/2 1 ~ 1
1/2 0 ~ 1
1100
*/
import java.util.Scanner;
class Demo03_23{
public static void main(String[] args){
//1.提示输入数字
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
//2.循环对二求余数,并赋予字符串binStr
String binStr="";
while(true){
binStr=num%2+binStr;//"1100"
num/=2;
if(num==0){
break;
}
}
//3.输出binStr
System.out.println(binStr);
}
}
24
/*
数据:输入的数
步骤:
1.提示输入数字
2.循环检查最大数,并计数,数字为0,结束循环
3.输出最大的数并且输出有多少个
*/
import java.util.Scanner;
class Demo03_24{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int num=0;
int max=0;
int count=0;
//1.提示输入数字
System.out.print("请输入数字:");
//2.循环检查最大数,并计数
while(true){
num=scanner.nextInt();
if(num==0){
break; //数字为0,结束循环
}else if(num>max){ //找最大数
max=num;
count=1;
}else if(num==max){ //计数
count++;
}
}
//3.输出最大的数并且输出有多少个
System.out.println("max="+max+",count="+count);
}
}