今天听老师说许多人学软件的人都是被这一章的循环所劝退了~~~循环也是一个难点、重点! 所以童鞋们 好好的学习这一章的内容吧!
在说这章之前先详细说一下跟这章有关的一个数据类型:boolean(布尔)数据类型.
boolean数据类型声明具有值true或者false的变量.
下面附上一个关系操作符表
注意:相等的关系操作符是两个等号(==), 而不是一个等号(-), 后者是指斌值操作符。 比较的结果是一个布尔值:true (真)或 false (假)
true 和 false 都是直接量,就像 10 这样的数字。它们被当作保留字一样,不能用做程 序中的标识符。
顺序结构
顺序结构是代码从主函数开始逐行向下运行,剩下的也没什么好说的!
选择结构
选择结构主要有两种
if 语句和switch语句它们之间有什么区别呢:if 既可以对一个单一的值进行判断,也可以对一个区间的值进行判断;switch 只能判断单一的值switch要求的变量的数据类型:byte、short、int、char、String、枚举
if语句
if语句的格式分为三种:单分支、双分支和多分支
下面分别是它们的流程图:
//基本格式
if(条件表达式){
当条件为true时执行的代码;
}else{
当条件为false时执行的代码;
}
//单if形式
if(条件表达式){
当条件为true时执行的代码;
}
//if-else-if形式
if(条件1){
}else if(条件2){
}else if(条件3){
}else{
}
//嵌套if-else形式
if(条件1){
条件1为true时执行的代码;
if(条件2){
条件2为true时执行的代码;
}else{
条件2为false时执行的代码;
}
}else{
条件1为false时执行的代码;
}
switch语句
Java提供 switch 语句来有效地处理多重条件的问题。
switch(变量){
case 值1:
执行语句1;
break;
case 值2:
执行语句2;
break;
case 值3:
执行语句3;
break;
........
deafult:
执行语句n;
break;
}
循环结构
循环结构是程序员在编程过程中遇到重复性问题时会使用循环结构来解决问题
循环结构主要包括两方面内容,for循环和while循环
for循环
for循环格式
for(1循环的初始化 ; 2循环的继续条件 ; 4循环的步长 ){
3循环体
}
循环过程:1-2-3-4-2 -3-4-2- 3-4-2- 3-4-2 直到循环的终止条件为止
流程图如下:
while循环
while( 循环继缞条件) {
循环体;
}
有一种写while逻辑比较清楚但有危险(死循环)的写法(需要在合适的时候用break关键字跳出循环)
while(true){
1.循环初始化
2.循环的继续条件
3.循环体
4.循环的步长
}
do-while循环
do-while是先将do后面的循环体执行之后在进入循环
do{
循环体;
} while ( 循环继续条件)
基础代码示例
输出:********
class Test01{
public static void main(String[] args){
for(int line=1;line<=4;line++){
for(int i=1;i<=8;i++){
System.out.print("*");
}
System.out.println();
}
}
}
/*
输出:
********
********
********
********
*/
/* i j
* 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
**** 8 1 2 3 4
*** 9 1 2 3
** 10 1 2
* 11 1
j<=i && j<=12-i
要求 * 循环体
最多出现两个for关键
只能有一个for嵌套
*/
//代码:
for(int i=1;i<=11;i++){
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("*");
}
System.out.println();
}
/* k=|i-6| |k| 当前行的最大的空格数
k i j
* -5 1 1
** -4 2 1 2
*** -3 3 1 2 3
**** -2 4 1 2 3 4
***** -1 5 1 2 3 4 5
****** 0 6 1 2 3 4 5 6
***** 1 7 1 2 3 4 5
**** 2 8 1 2 3 4
*** 3 9 1 2 3
** 4 10 1 2
* 5 11 1
*/
//代码:
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("*");
}
System.out.println();
}
/* k=|i-6| |k| 当前行的最大的空格数
k i j
* -5 1 1
* * -4 2 1 2
* * * -3 3 1 2 3
* * * * -2 4 1 2 3 4
* * * * * -1 5 1 2 3 4 5
* * * * * * 0 6 1 2 3 4 5 6
* * * * * 1 7 1 2 3 4 5
* * * * 2 8 1 2 3 4
* * * 3 9 1 2 3
* * 4 10 1 2
* 5 11 1
*/
//代码:
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
System.out.print("* ");
}
System.out.println();
}
/* k=|i-6| |k| 当前行的最大的空格数
k i j
* -5 1 1
* * -4 2 1 2
* * -3 3 1 2 3
* * -2 4 1 2 3 4
* * -1 5 1 2 3 4 5
* * 0 6 1 2 3 4 5 6
* * 1 7 1 2 3 4 5
* * 2 8 1 2 3 4
* * 3 9 1 2 3
* * 4 10 1 2
* 5 11 1
j==1 j==i j+i==12
*/
//代码:
for(int i=1;i<=11;i++){
for(int k=1;k<=Math.abs(i-6);k++){
System.out.print(" ");
}
for(int j=1;j<=i&&j<=12-i;j++){
if(j==1||j==i||j+i==12){
System.out.print("* ");
}else{
System.out.print(" ");
}
}
System.out.println();
}
例题展示
import java.util.*;
class Demo03_14{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字:");
int num = scanner.nextInt();
for(int i=1;i<=num;i++){
for(int j=1;j<=num-i;j++){
System.out.print(" ");
}
for(int k=-(i-1);k<=i-1;k++){
System.out.print(Math.abs(k)+1+" ");
}
System.out.println();
}
}
}
每行数字的规律 :
以第三行为例,3 2 1 2 1 一般先减后增的数字排列,我们的第一反应应该就是 数学中的绝对值函数
那么对应函数的 值域为 [ 1,3 ] y 即 3 2 1 2 1 -------对应第 3 行
定义域为 [ - 2, 2 ] x 即 -2 -1 0 1 2 ,解题思想就是 需要 建立 行数 i 与 x 之间的关系 把输出数字 用 x 表示
出来 , 可以发现 x 最小是 负的 行数 - 1 ,最大是 行数 - 1 ,那么输出数字就是 x 的绝对值 + 1 ;
空格的规律:空格数 依次递减 以第三行为例, 空格数 为 输出总行数 - 该行序列数
class Demo03_15{
public static void main(String[] args) {
//Pattern1:
for(int i = 1;i<=6;i++){
for(int j = 1;j<=i;j++)
System.out.print(j);
System.out.println();
}
System.out.println();
//Pattern2:
for(int i = 6;i>=1;i--){
for(int j = 1;j<=i;j++)
System.out.print(j);
System.out.println();
}
System.out.println();
//Pattern3 :
for(int i = 1;i<=6;i++){
for(int j = 1; j<=(6-i);j++)
System.out.print(" ");
for(int j = i;j>=1;j--)
System.out.print(j);
System.out.println();
}
System.out.println();
//Pattern4:
for(int i = 1;i<=6;i++){
for(int j = 1; j<=(i-1);j++)
System.out.print(" ");
for(int j = 1;j<=(7-i);j++)
System.out.print(j);
System.out.println();
}
}
}
pattern1:
每行都是由1递增到该行序列数,所以建立它与行数之间的关系即 x<= i 注意输出的是 数字 + 一个空格
pattern2
以第一行为例 1 2 3 4 5 6 可以发现它与行数 i 的 关系就是输出数字 x = 7- i 第一行 输出 1~6,第二行输出 1~5,
以此类推
pattern3:
与前两个图案不同的是 这个图案 加入了 空格
空格规律:第一行 5 个 空格 ,第二行 4 个 ,第三行 3 个 ,依次递减,那么建立 他与 行数 i 的关系 就是 k=6- i
数字规律:以第三行为例 3 2 1 即 由行序数依次递减为 1 ;那么建立他与行数 之间的关系就是 输出数字数 等于行序数
,输出数字最小 为1 且 依次递减 即 int x=i;x>=1;x--
public class Demo03_16{
public static void main(String[] args){
for(int i =1;i<=8;i++){ //输出行数
for(int j =1;j<=8-i;j++){ //输出空格数
System.out.print(" "); //每次输出4个空格
}
for(int x=-(i)+1;x<=i-1;x++ ){ //输出数字
System.out.printf("%4d",(int)Math.pow(2,Math.abs(x)));
}
System.out.println();
}
}
}
累死了! 自我觉得总结的还算全面吧 这里说一下博客里的东西有一部分有参考其他博主 因为有些东西我理解但我不太会表达!