# 自己总结今天上课的内容
## 控制流程语句
- 顺序结构
是程序中最简单最基本的流程控制,总的来说:写在前面的先执行,写在后面的后执行
- 选择结构
if语句
```
1. if(关系表达式){
语句体,
}
2. if(关系表达式){
语句体;
}else{
语句体2;
}
3. if(关系表达式){
语句体1;
}else if(关系表达式2){
语句体2;
}
...
else{
语句体n+1;
}
```
注意事项
- 关系表达式无论简单还是复杂,结果必须是Boolean类型
- if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略
- 一般来说:有左大括号就没有分号,有分号就没有左大括号。
switch语句
```
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
default
语句体n+1;
break;
```
switch表示这是switch语句
表达式的取值:byte, short, int, char
JDK5以后可以是枚举
JDK7以后可以是String
default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
可以放在switch语句的任何位置。
default可以省略吗?
可以省略,一般不建议。除非判断的值是固定的。
switch语句结束条件
遇到break
执行到程序的末尾
- 循环结构
- for循环
- while循环
- do-while循环
for循环和while循环的区别
for循环和while循环语句可以等价交换,但还是有些小区别的
使用区别
控制条件语句所控制的那个变量,在for循环结束后就不能再被访问到了,而while循环结束后还可以继续使用,如果你想 继续使用,就用while,否则推荐使用for,原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
场景区别
for循环适合针对一个范围判断进行操作(循环次数比较明确)
while循环适合判断次数不明确操作
- 拓展
- 如何判断一个数是水仙花数?
取出**个位**数字;
```
int units = i/Math.pow(10,0) % 10;
int tens = i / Math.pow(10, 1) % 10;
int hundreds = i / Math.pow(10, 2) % 10;
```
- 循环结构:写程序时优先考虑for循环,其次考虑while循环,最后才考虑do-while循环
- 死循环:当判断条件为true,就会形成死循环
1.for(; ; );
2.while(true){}
- 转义字符 '\t' tab '\n' enter
- 打印九九乘法表(**待完成**)(见下题)
技巧:在输出等式之前输出空格
- 统计这样的三位数{1, 2, 3, 4}这4个数字组成,并且没有重复的数字(**待完成**)
```
class Demo1{
//统计这样的三位数{1, 2, 3, 4}这4个数字组成,并且没有重复的数字
public static void main(String[] args){
int count = 0;
for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 4; j ++){
for(int k = 1; k <= 4; k ++){
if(i != j && i != k && j != k){
System.out.println(i * 100 + j * 10 + k);
count++;
}
}
}
}
System.out.println(count);
}
}
```
## 跳转控制语句
1.break(中断)
- 应用场景
1.switch
2.循环
3.离开使用场景的存在是没有意义的
- 作用
跳出单层循环
标签:可以用标签跳出外层循环
break 标签名;
2.continue(继续)
- 使用场景
只能在循环中使用
离开使用场景没意义
- 作用
终止这次循环,开始下次循环
3.return(返回)
- 作用
结束一个方法,并返回一个值
## 方法
1.概述:完成特定功能的代码块
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){
函数体;
return 返回值;
}
2.有返回值方法的调用
直接调用(单独调用)
输出调用
复制调用
3.没有明确返回值类型的函数调用
其实就是对void类型的方法调用
只能单独调用
4.方法重载
方法名相同,形参个数不同,与返回值类型,形参类型无关
注意事项:如果没有数据类型一样的方法,编译器会自己把数据类型转换为最接近它的同名方法
对于数据类型兼容,逻辑一样的方法,就不用使用方法重载,直接定义数据类型占用字节最长的(比如long)
## 数组
1. 概述
存储同一种数据类型多个元素的容器。
# 小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
```
class Demo2{
//小芳的妈妈每天给她2.5元钱,她都会存起来,
//但是,每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
//请问,经过多少天,小芳才可以存到100元钱。
public static void main(String[] args){
double sum = 0; //定义存的钱的数目
int i = 0; //定义第一天 这里应该从0开始,之前提交的答案错了
while(sum < 100){
sum += 2.5; //每天加2.5
if(i % 5== 0){ //存钱的第5天或者5的倍数的话,她都会花去6元钱,
sum -= 6;
}
i++; //每天的天数加一
}
System.out.println(i);//输出天数
}
}
```
输出结果:75
# 函数的概念?函数的格式?格式的解释说明
概述:完成特定功能的代码块
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2){
函数体;
return 返回值;
}
修饰符:比较多,后面会详细介绍。目前public static
返回值类型:用于限定返回值的数据类型
方法名:一个名称,为了方便我们调用方法
参数类型:限定调用方法时传入参数的数据类型
参数名:是一个变量,接受调用方法时传入的参数(形参)
方法体:完成功能的代码
return 结束方法以及返回方法指定类型的值
返回值 程序被return带回的结果,返回给调用者
# 函数的调用
A:明确返回值类型的函数调用
直接调用(单独调用)
输出调用
复制调用
B:void类型的函数调用
其实就是对void类型的方法调用
只能单独调用
# 函数的练习:
A: 获取4个值中的最大值
```
class Demo3{
//获取4个值中的最大值
public static void main(String[] args){
int a = 1,b = 2, c = 3, d = 4;
int max = a;
if(b > max){
max = b;
}
if(c > max){
max = c;
}
if(d > max){
max = d;
}
System.out.println(max);
}
}
```
B: 花式打印九九乘法表(按四种不同方式打印)
```
class Demo4_1{
//花式打印九九乘法表
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) + '\t');
}
System.out.println();
}
}
}
```
```
class Demo4_2{
//花式打印九九乘法表
public static void main(String[] args){
for(int i = 1; i <= 9; i++){
//在输出数字之前输出空格
for(int j = 1; j <= 9 - i; j++){
System.out.print(" " + '\t');
}
for(int j = 1; j <= i; j++){
System.out.print(i + "*" + j + "=" + (i * j) + '\t');
}
System.out.println();
}
}
}
```
```
class Demo4_3{
//花式打印九九乘法表
public static void main(String[] args){
for(int i = 9; i >= 1; i--){
for(int j = 1; j <= i; j++){
System.out.print(i + "*" + j + "=" + (i * j) + '\t');
}
System.out.println();
}
}
}
```
```
class Demo4_4{
//花式打印九九乘法表
public static void main(String[] args){
for(int i = 9; i >= 1; i--){
for(int j = 1;j <= 9 - i; j ++){
System.out.print(" " + '\t');
}
for(int j = 1; j <= i; j++){
System.out.print(i + "*" + j + "=" + (i * j) + '\t');
}
System.out.println();
}
}
}
```
# 什么是函数重载?
System.out.println( )该函数有很多重载的类型,支持将一个不同类型的参数打印出来。如:
void println(boolean x)
打印 boolean 值,然后终止行。
void println(char x)
打印字符,然后终止该行。
void println(char[] x)
打印字符数组,然后终止该行。
void println(double x)
打印 double,然后终止该行。
void println(float x)
打印 float,然后终止该行。
void println(int x)
打印整数,然后终止该行。
void println(long x)
打印 long,然后终止该行。
void println(String x)
打印 String,然后终止该行。
但是只能打印一个参数。
能不能想办法写一组类似的输出函数,支持传入两个参数打印出来?如:
void println(boolean x,boolean y) 打印两个boolean类型的值
void println(char x, char y) 打印两个char类型的值
```
package com.wangdao.day05;
import java.util.Scanner;
/**
* @author Yuechao Yang E-mail:yyc05060808@outlook.com
* @version 创建时间:2019年3月29日 下午10:00:07
* 类说明
*/
public class Demo1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入两个数:");
String x = in.next();
String y = in.next();
println(x,y);
}
public static void println(long x, long y) {
System.out.println(x + " " + y);
}
public static void println(int x, int y) {
System.out.println(x + " " + y);
}
public static void println(byte x, byte y) {
System.out.println(x + " " + y);
}
public static void println(short x, short y) {
System.out.println(x + " " + y);
}
public static void println(boolean x, boolean y) {
System.out.println(x + " " + y);
}
public static void println(char x, char y) {
System.out.println(x + " " + y);
}
public static void println(float x, float y) {
System.out.println(x + " " + y);
}
public static void println(double x, double y) {
System.out.println(x + " " + y);
}
public static void println(String x, String y) {
System.out.println(x + " " + y);
}
public static void println(char[] x, char[] y) {
System.out.println(x + " " + y);
}
}
```