文章目录
一、eclipse的debug
二、if判断语句
1.if
2.if-else
- else 的意思是否则,if-else语句表示if语句不成立会怎么做
3.嵌套的判断语句
- 嵌套的判断
- else的匹配
- 在if或else后面总是用{},即使只有一条语句的时候,
可以避免计算机或别人对代码的误解
4.级联的判断语句
- 形如:
- 单一出口
推荐使用左边那种写法,养成良好的代码风格
5.switch-case语句
- switch
- 级联的判断语句过多时,用switch-case语句更方便快捷
- 形如:
第一个:控制表达式只能是整数型的结果,我也不怎么懂,推荐链接: Java中的Switch对整型、字符型、字符串型的具体实现细节,给你详细解答。
-----------------------------------------------------------------------------------------------------------
总结:swich只支持一种数据类型,那就是整型,其他数据类型都是转换成整型之后在使用switch的。
- break
6.if语句常见的错误
- 忘了大括号
- if后面有多条语句时没有加大括号,只有第一句在判断语句内
if (age > 60)
salary = salary * 1.2;
System.out.println(salary)
//等于:
if (age > 60)
{
salary = salary * 1.2;
}
System.out.println(salary)
- if后面的分号
if(age<MINOR)
;//在if后加分号表示判断后什么也不做
{
System.out.print(false);
}
else//else没有if可以匹配,所以报错,
//因为前面的if已经被 ";" 结束了
- 错误使用==和=
- 使人困惑的else(代码风格问题)
三、循环
1.数位数
- 一个简单的求数字位数的程序,用于以下循环学习:
Scanner in = new Scanner(System.in); int number = in.nextInt(); int count = 0; while( number > 0) { number = number / 10; count = count + 1; } System.out.print(count);
2.while循环
- while
- 验证
-
对数位数程序进行验证:
-
方法一:自己算
-
方法二:在循环体中插入显示变量的内容
-
方法三:debug调试程序
-
发现输入边界数据——0 时程序存在问题
3.do-while循环
- 问题回顾
- 由于程序进入循环前就判断0>0错误,所以没有进入循环,位数count直接为0
- 那如果能在进入循环后在判断0>0错误,位数coun就会为1,满足要求
- do-while
- 改进
Scanner in = new Scanner(System.in); int number = in.nextInt(); int count = 0; do//do-while循环 { number = number / 10; count = count + 1; System.out.println("number=" + number + "count=" + count); } while( number > 0); System.out.print(count);
4.while循环和do-while循环的区别
- 图左先进循环体后判断是do-while循环
- 图右先判断后进循环体是while循环
5. 计数循环
- while
- 循环体内count先-1,后输出
Scanner in = new Scanner(System.in);
int count = 100;
while ( count >= 0)
{
count = count - 1;
System.out.println(count);
}
System.out.println(count);
System.out.println("发射!");
//运行结果:99~-1 -1 发射
-
- 循环体内count先输出,后-1
Scanner in = new Scanner(System.in);
int count = 100;
while ( count >= 0)
{
System.out.println(count);
count = count - 1;
}
System.out.println(count);
System.out.println("发射!");
//运行结果:100~0 -1 发射
- 换成do-while循环后结果没有影响
6.算平均数
- 输入多个数求平均值
Scanner in = new Scanner(System.in);
int count = 0;
int number = 0;
int sum = 0;
// //while循环方案
// number = in.nextInt();
// while ( number != -1 )
// {
// sum += number;//等同于sum = sum + number
// count++;//count自加1,等同于count = count + 1
// number = in.nextInt();
// }
//do-while循环方案
do
{
number = in.nextInt();
if ( number != -1 )//number=-1时不需要执行下面操作
{
sum += number;
count++;
}
} while ( number != -1 );
if ( count > 0 )//count为0时,sum/count无意义
System.out.println("平均数 = " + (double)sum / count);
7.猜数
—— 思想步骤
Scanner in = new Scanner(System.in);
// 随机获取[1,100]之间的整数
//Math.random()作用:获取[0,1)之间的浮点数
int number = (int)(Math.random() * 100 + 1);//作用:获取从[1,100]之间的数
int a;//用户猜的整数
int count = 0;//计数
//循环体需要先进行后判断,所以用do-while循环
// System.out.println(number);
do
{
a = in.nextInt();//用户输入猜想的整数
count++;
if ( a > number )
{
System.out.println("你猜大了");
}
else if ( a < number )
{
System.out.println("你猜小了");
}
} while ( a != number );
System.out.println("恭喜你猜对了,你一共猜了" + count + "次!");
8.整数分解(逆序)
Scanner in = new Scanner(System.in);
// //方法一
// int number = in.nextInt();
// do
// {
// int digit = number % 10;//获取末位数
// System.out.print(digit);//依次输出数的末位数,以达到逆序输出的目的
// number = number / 10;//原数去除末位数
// } while ( number > 0);
//方法二
int number = in.nextInt();
int result = 0;//保存之前结果
do
{
int digit = number % 10;//获取末位数
result = result * 10 + digit;
number = number / 10;//原数去除末位数
} while ( number > 0);
System.out.println(result);
9.for循环
- 引入:阶乘
- 用while循环
- 除了while循环,也可以使用for循环完成阶乘运算
- for循环的作用:
- for循环的结构:
- for循环里面的循环控制变量i:
- for循环与while循环
- for循环和while循环可以相互转换
- for循环表达式的省略
- 空循环
- for(;;)后加分号“ ;” 会造成空循环,循环体并不执行
- 同if和while,如果for循环的循环体里面只有一条语句,大括号{ } 可以省略
- 无论大括号可不可以省略,都强烈建议加上大括号
- for循环次数
- while、do-while和for循环运用的建议
10.复合赋值与自增
11.break与continue的区别
12.求素数
Scanner in = new Scanner(System.in);
//求素数
int n = in.nextInt();//输入一个数n,判断n是否为素数
int isPrime = 1;//判断n是否为素数,1为是素数,0为不是素数
for(int i = 2; i < n; i++)
{
if(n%i == 0)
{
isPrime = 0;
// System.out.println(n + "不是素数,i=" + i);
break;//当第一次有n能被i整除时,就能判断n不是素数,
//所以后面,n就不用依次被i除来多次判断n不是素数了
}
}
if(isPrime == 1)
System.out.println(n + "是素数");
else
System.out.println(n + "不是素数");
13.多重循环
- 求100以内的素数
Scanner in = new Scanner(System.in);
//在求素数的程序外套一层for循环
for(int n = 2; n < 100; n++)//判断2~100是否为素数
{
//求素数
// int n = in.nextInt();//输入一个数n,判断n是否为素数
int isPrime = 1;//判断n是否为素数,1为是素数,0为不是素数
for(int i = 2; i < n; i++)
{
if(n%i == 0)
{
isPrime = 0;
break;//当第一次有n能被i整除时,就能判断n不是素数,
//所以后面,n就不用依次被i除来多次判断n不是素数了
}
}
if(isPrime == 1)
System.out.print(n + " ");
}
- 更多事例
- 跳出多重循环
-
事例:
-
方法一:设置控制变量,然后一层一层的用break跳出
- 方法二:在多重循环前设置标号
14.逻辑类型
- boolean
- 逻辑运算符
- 尝试运用逻辑运算符表达数学中的区间
- 优先级
15.求和
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0;
for(int i = 1; i <= n; i++)
{
sum += 1.0 / i;
}
System.out.printf("%.2f",sum);//printf设置数据的输出格式,此为输出小数点后两位
16.求最大公约数
-
三个方法:
//求最大公约数 int a = in.nextInt(); int b = in.nextInt(); // //方法一:枚举 // int gcd = 1; // for(int i = 2; i <= a && i <= b; i++) // { // if(a % i == 0 && b % i == 0) // gcd = i; // } // System.out.println(a + "和" + b + "的最大公约数是" + gcd); // //方法二:更相减损术 // while(a != b) // { // if(a > b) // a = a - b; // else if(b > a) // b = b - a; // } // System.out.println("最大公约数是" + a); //方法三:辗转相除法 while(b != 0) { int t = a % b; a = b; b = t; } System.out.println("最大公约数是" + a);
四、总结
1.判断
- if语句
- 嵌套的判断语句
- 级联的判断语句
- switch语句
- 判断语句常见问题
2.循环
-
while循环
-
do-while循环
-
for循环
-
复合赋值与自增
- 退出循环