第三章 分支与循环语句
文章目录
3.1 if条件语句
单分支语句
...CodeA
if (布尔表达式){
语句组;
}
...CodeB
import java.util.Scanner;
public class Demo18 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//提醒用户输入一个年份
System.out.print("请用户输入一个年份");
int nianFen = input.nextInt();
//判断该年份是不是闰年
if ((nianFen % 4 == 0 && nianFen % 100 != 0) || nianFen % 400 == 0){
//输出结果
System.out.println(nianFen + "是闰年")
}
}
}
双分支if-else语句`
...CodeA
if (布尔表达式){
语句组A;
} else {
语句组B;
}
...CodeB
import java.util.Scanner;
public class Demo26{
//点的坐标 圆心坐标 r 点到圆心距
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//提醒用户输入一个点
System.out.print("Enter a point with two coordinates:");
double x = input.nextDouble();
double y = input.nextDouble();
//计算点到圆心的距离
double juli = Math.sqrt(Math.pow(x,2) + Math.pow(y,2));
//判断点是否在圆内,并输出结果
if (juli <= 10){
System.out.println("Point (" + x + "," + y + ") is in the circle");
} else {
System.out.println("Point (" + x + "," + y + ") is not in the circle");
}
}
}
多分支if-else-if语句
...CodeA
if (布尔表达式){
语句组A;
} else if (布尔表达式) {
语句组B;
.......
}else if (布尔表达式) {
语句组c;
} else {
语句组D;
}
...CodeB
import java.util.Scanner;
public class Demo17{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//提示用户输入体重与身高
System.out.print("Enter shenGao and tiZhong:");
double shenGao = input.nextDouble();
double tiZhong = input.nextDouble();
//求BMI
double bmi = tiZhong / Math.pow(shenGao,2);
//输出你的bmi
System.out.println("BMI:" + bmi);
//判断
if (bmi < 18.5){
System.out.println("偏瘦");
} else if (bmi < 25.0){
System.out.println("正常");
} else if (bmi < 30.0){
System.out.println("超重");
} else {
System.out.println("过胖");
}
}
}
3.2 switch分支语句
与if分支语句一样, 都是对条件的判断。switch一般用在条件较多的情况下, 但是有一个重要的细节,if语句可以对区间值或固定值进行判断,switch只能对固定值判断。(很少用,基本上只用if)
switch (变量) {
case 值1: //if (变量 == 值一) {语句组A}
语句组A:
break;
case 值2:
语句组B:
break;
...
case 值n:
语句组n:
break;
default:
语句组n+1;
break;
}
switch细节
1.switch所传入的变量,char,byte, short, int, String或者枚举类型
2.值1,值2,一直到值n,这几个值必须是同一个数据类型的
3.当变量匹配到相关case的值的时候,执行case中的语句,直到遇到break结束;如果该case语句中没有break,则继续向下执行,不再匹配case的值,直接输出,直到遇到另外一个break结束。
public class Sample{
public static void main(String[] args){
int a = 4;
switch (a) {
case 1:
System.out.println("case 1 ");
break;
case 2:
System.out.println("case 2");
break;
case 3:
System.out.println("case 3");
case 4:
System.out.println("case 4");
case 5:
System.out.println("case 5");
break;
default:
System.out.println("default");
break;
}
}
}
输入一个年份,来判断一个年份的属相?
import java.util.Scanner;
public class Sample1{
public static void main(String[] args){
/*
2020 % 12 = 4 鼠
2021 % 12 = 5 牛
*/
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int choice = year % 12;
switch (choice){
case 0:
System.out.println("猴年");
break;
case 1:
System.out.println("sda");
break;
default:
System.out.println("werwe");
break;
}
}
}
3.3 for循环语句
循环主要解决具有规律性的且具有重复性的代码问题。
循环四要数
- 循环的初始化:循环的第一次执行从哪里开始
- 循环的继续条件:循环从当前轮是否向后执行下一轮
- 循环体:需要被循环执行的部分
- 循环的步长、周期:当前循环到下一轮循环之间的变化
循环问题可以分为两大类
- 已知循环次数的 一般使用for语句
- 未知循环次数但是已知循环结束条件 一般使用whlie 语句
for (1.循环的初始化;2.循环的继续条件;4.循环的步长) {
3.循环体
}
1-2-3-4-2-3-4-2-3-4-2不满足,结束循环
import java.util.Scanner;
public class Sample2{
public static void main(String[] args){
// Scanner input = new Scanner(System.in);
// int number = input.nextInt;
/* i
***** 1 2 3 4 5
i <= 5
*/
for (int i = 1; i<=5;i++){
System.out.print("*");
}
System.out.println();
System.out.println("=====");
/* j i
***** 1 12345
***** 2
***** 3
***** 4
j <= 4 i <= 5
*/
for (int j = 1; j <= 4;j++){
for (int i = 1;i<=5;i++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=====");
/* k i
* 1 1
** 2 1 2
*** 3 1 2 3
**** 4 1 2 3 4
***** 5 1 2 3 4 5
****** 6 1 2 3 4 5 6
******* 7 1 2 3 4 5 6 7
K <= 7 i <= k
*/
for (int k = 1;k <= 7;k++){
for (int i = 1;i <= k;i++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=====");
/* k i
****** 6 1 2 3 4 5 6
***** 5 1 2 3 4 5
**** 4 1 2 3 4
*** 3 1 2 3
** 2 1 2
* 1 1
k >= 1 i <= k
*/
for (int k = 6;k >= 1;k--){
for (int i = 1;i <= k;i++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=====");
/* k i
* 1 1
** 2 1 2
*** 2 1 2 3
**** 4 1 2 3 4
***** 5 1 2 3 4 5
****** 6 1 2 3 4 5 6 i <= k
***** 7 1 2 3 4 5
**** 8 1 2 3 4
*** 9 1 2 3
** 10 1 2
* 11 1 i <= 12 - k
k <= 11
*/
for (int k = 1;k <= 11 ;k++){
for (int i = 1;i <= k && i <= 12 -k;i++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=====");
for (int k = 1;k <= 11;k++){
for(int j =5;j >= k || j >= 12 - k ;j--){
System.out.print(" ");
}
for(int i = 1;i <= k && i <= 12 -k;i++){
System.out.print("*");
}
System.out.println();
}
System.out.println("=====");
//老师的
for (int k = 1;k <= 11;k++){
for (int i = 1;i <= Math.abs(k - 6);i++){
System.out.print(" ");
}
for (int j = 1;j <= k && j <= 12 - k;j++){
System.out.print("*");
}
System.out.println();
}
for (int k = 1;k <= 11;k++){
for (int i = 1;i <= Math.abs(k - 6);i++){
System.out.print(" ");
}
for (int j = 1;j <= k && j <= 12 - k;j++){
System.out.print("* ");
}
System.out.println();
}
for (int k = 1;k <= 11;k++){
for (int i = 1;i <= Math.abs(k - 6);i++){
System.out.print(" ");
}
for (int j = 1;j <= k && j <= 12 - k;j++){
if (j == 1 || j == k || j + k == 12){
System.out.print("* ");
}
else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
3.4 whlie循环语句
while主要用于解决未知循环次数,但是已知循环结束条件
whlie 可以和for循环相互转换因为其都逃不过循环四要数
for (int i = 1;i <= 5;i++) {
System.out.println(i);
}
可以转换为whlie循环
int i = 1;
whlie (i <= 5) {
System.out.println(i);
i++;
}
whlie语法格式
1.循环的初始化
while (2.循环的继续条件){
3.循环体
4.循环的步长,周期
}
数值拆分求和
public class Sample{
public static void main(String[] args){
//输入一个未知长度的数字
Scanner input = new Scanner(System.in);
System.out.print("请输入一个数字");
int number = input.nextInt();
int sum = 0;
whlie (number != 0) {
sum += number % 10;
number /= 10;
}
System.out.println(sum)
}
}
import java.util.*;
public class Demo32{
public static void main(String[] args) {
//电脑随机获取一个数
Random random = new Random();
int com = random.nextInt(101);
//用户输入一个数
Scanner input = new Scanner(System.in);
int user = input.nextInt();
while (true) {
System.out.print("Enter your guess:");
if (user > com) {
System.out.println("high");
} else if (user < com) {
System.out.println("low");
} else {
System.out.println("yes");
break;
}
}
}
}
3.5 break 与continue 跳转语句
1、break
break语句的作用是中断单层循环,跳出循环体,也就是实现程序跳转到当前循环体右大括号末尾。
2、continue
实现程序跳转到当前循环体的开始处(for循环是跳转到条件控制语句),重新执行循环体。
总结
System.out.print()与System.out.println()的区别
1.println():先输出完毕再换行。
2.print():直接输出完毕后不换行。
3.println()不输出任何东西时,就输出一个换行符。
标识符命名规范
1.大驼峰式:主要针对类名,接口名,所有单词首字母大写。
2.小驼峰式:主要针对变量名,函数名,除第一个以外,其他单词首字母大写。
3.常量规范:所有单词大写,单词与单词之间用下划线分隔。
4.包名规范:所有单词小写,单词与单词之间用**.**分隔。
myAge 变量名
getMax() 函数名
MyMoney 类名,接口名
MAX_VALUE 常量名
com.oupeng.java 包名
中断控制流程语句
1、break
break语句的作用是中断单层循环,跳出循环体,也就是实现程序跳转到当前循环体右大括号末尾。
2、continue
实现程序跳转到当前循环体的开始处(for循环是跳转到条件控制语句),重新执行循环体。
3、return
实现程序跳转到当前方法的结束,并附带返回值给调用者。//直接结束程序/不在往下运行
for 的嵌套(每次外部循环,内部循环都要执行完这次循环)
1.for循环的嵌套,变量的位置取决于第一个循环每循环一次,第二个循环使用是不是要重新定义变量的值。是,放在一二之间,不是,一的外面。
2.内外循环独立进行
内部循环的条件是固定的,每次外部循环,内部循环都要执行完这次循环。
public class Sample1{
public static void main(String[] args){
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",a[j]);
printf("\n");
}
}
内部循环进行5次,外部循环也进行5次,相当于外部循环把内部循环的结果打印了5次,内部循环的条件是固定的(j<5),每次外部循环,内部循环都要进行5次
3.内部循环依赖于外部循环
内部循环的条件每次都是变化的,取决于外部循环
public class Sample1{
public static void main(String[] args){
int i,j;
char a[5]="$$$$$";
for(i=0;i<5;i++)
{
for(j=0;j<=i;j++)
printf("%c",a[j]);
printf("\n");
}
}
当外部循环进行第一次时,即i=0时,由于内部循环的条件为j<=i,此时0<=0,满足循环条件,在这种方式中,内部循环的条件每次都是变化的。因此,当外部循环进行一次时,内部循环进行打印出数组a[5]中的第一个元素a[1],即打印出一个$。以此类推打印出了a[5]中的所有元素。
4.说白了就是一个在一个for循环中写了另外一个for循环语句。在这种循环中,外层循环控制着执行的行,也就是“大圈”,内层循环控制着执行的列,也就是“小圈”。“大圈”执行一次循环,“小圈”要完整遍历一次,直至继续条件不满足。
做编程题方法总结(1、看题 2、分析数据 3、举例分析规律 (找到一个函数模型)4、写代码)
1.产生一个随机数
Random randon = new Random();
int com = random.nextInm(3);
2.循环中可以连续读取一段数字
import java.util.Scanner;
public class Demo52{
/*
3 5 2 5 5 5 0
*/
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter numbers:");
int max = 0;
int count = 0;
while (true){
int numbers = input.nextInt();
if (numbers == 0){
break;
}
if (numbers > max){
max = numbers;
count++;
}
}
System.out.println(max);
System.out.println(count);
}
}
3.对如下,先找到规律,先减后增/先增后减,用绝对值,求函数模型
但是也可以分两个循环来写。
import java.util.Scanner;
public class Demo41{
/* 5
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4 先减后增 用绝对值
3 2 1 0 1 2 3 + 1 y = |x| + 1 x属于[-3,3]
5 4 3 2 1 2 3 4 5 y = |x| + 1 x属于[-4,4]
第i行 y = |x| + 1 x属于[-(i-1),i-1]
*/
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter the number:");
int number = input.nextInt();
// for (int i = 1;i <= number;i++){
// for (int l = number;l > i ;l--){
// System.out.print(" ");
// }
// for (int j = i;j > 0;j--){
// System.out.print(j + " ");
// }
// for (int k = 2;k <= i;k++){
// System.out.print(k + " ");
// }
// System.out.println();
// }
for (int i = 1;i <= number;i++){
for (int l = number;l > i ;l--){
System.out.print(" ");
}
for (int j = -(i - 1);j <= i - 1;j++){
System.out.print(Math.abs(j) + 1 + " ");
}
System.out.println();
}
}
}
public class Demo43{
/*
1 2 4 8 16 32 16 8 4 2 1 先递增后递减
0 1 2 3 4 5 4 3 2 1 0 y = i-1 - |x| x=(-(i-1),i-1)
*/
public static void main(String[] args){
for (int i = 1;i <= 8;i++){
for (int k = 8; k > i;k--){
System.out.print(" ");
}
for (int j = -(i - 1);j <= i - 1;j++){
int k = i - 1 - Math.abs(j);
int l = (int)Math.pow(2,Math.abs(k));
System.out.printf("%4d",l);
}
// for (int j = 0; j >= -i;j--){
// System.out.print((int)Math.pow(2,Math.abs(j)) + " ");
// }
// for (int k = i-1; k >= 0 ;k--){
// System.out.print((int)Math.pow(2,k) + " ");
// }
System.out.println();
}
}
}
4.在if 条件语句和循环语句中定义的变量,只能在里面调用; 而在外定义的变量会随着两者里面的相同变量的改变而改变。
boolean : 如果该循环有两种结束方式,一种是正常结束,另一种是break结束。在第二个循环中,如果有break,一般使用boolean.
int number = 2;
int count = 0;
while (count < 50){
boolean flag = true;
for (int i = 2;i <= number / 2;i++){
if (number % i == 0){
flag = false;
break;
}
}
if (flag){
System.out.print(number + "\t");
count++;
if (count % 10 == 0){
System.out.println();
}
}
number++;
}
5.反转数字
5.1
5.2十进制转二进制(字符串+数字等于字符串) 反转排序
import java.util.Scanner;
public class Demo50{
/*
11 / 2 余 1
5 / 2 余1
2 / 2 余 0
1 / 2 余 1
1 + "" = "1"
"1" + 1 = "11" //**+**表示连接
*/
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("Enter number:");
int number = input.nextInt();
String sum = "";
while (number != 0){
sum = number % 2 + sum;
number /= 2;
}
System.out.println(sum);
}
}
System.out.println("%4d");
这个东西占四格。
例题
import java.util.Scanner;
public class Demo29{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//提示用户输入
System.out.print("Enter r1:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double w1 = input.nextDouble();
double h1 = input.nextDouble();
System.out.print("Enter r2:");
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double w2 = input.nextDouble();
double h2 = input.nextDouble();
if (y2 - y1 <= (h1 -h2) / 2 &&
y1 - y2 <= (h1 -h2) / 2 &&
x2 - x1 <= (w1 - w2) / 2 &&
x1 - x2 <= (w1 - w2) / 2) {
System.out.println("r2 in r1");
} else if (y2 - y1 >= (h1 + h2) / 2 ||
y1 - y2 >= (h1 + h2) / 2 ||
x2 - x1 >= (w1 + w2) / 2 ||
x1 - x2 >= (w1 + w2) / 2) {
System.out.println("r2 out of r1");
} else {
System.out.println("r2 xianjiao r1");
}
}
}