1. 二重循环+数组
1.1. 常用的math方法
Math.random() double 类型的随机小数 [0.0,1.0)
Math.abs() 计算绝对值
四舍五入
static long | round(double a) |
static int | round(float a) |
计算平方根
static double | sqrt(double a) |
取下限 “floor“ 地板
static double | floor(double a) |
取上限 “ceil“ 天花板
static double | ceil(double a) |
/**
* Math中的常用函数
* @author Administrator
*
*/
public class TestMath {
public static void main(String[] args) {
//计算绝对值
System.out.println(Math.abs(-3.5)); //3.5
System.out.println(Math.abs(3.5)); //3.5
//计算几次方法 4的3次方 double类型
System.out.println(Math.pow(4, 3)); //64.0
//计算2个数的较大值
System.out.println(Math.max(2.3, 5.3)); //5.3
System.out.println(Math.max(-2.3, -5.3)); //-2.3
//计算2个数的较小值
System.out.println(Math.min(2.3, 5.3)); //2.3
System.out.println(Math.min(-2.3, -5.3));//-5.3
//计算四舍五入 Math.round(double类型的) 返回 的是long
System.out.println("==========四舍五入1 返回值 long===========");
System.out.println(Math.round(2.3)); //2
System.out.println(Math.round(-2.3)); //-2
//临界值注意
System.out.println(Math.round(2.5)); //3
System.out.println(Math.round(-2.5)); //-2
System.out.println(Math.round(2.7)); //3
System.out.println(Math.round(-2.7));//-3
//Math.round(float类型的) 返回的int类型
System.out.println("==========四舍五入2 返回值int ===========");
System.out.println(Math.round(2.3f)); //2
System.out.println(Math.round(-2.3f)); //-2
//临界值注意
System.out.println(Math.round(2.5f)); //3
System.out.println(Math.round(-2.5f)); //-2
System.out.println(Math.round(2.7f)); //3
System.out.println(Math.round(-2.7f));//-3
System.out.println("==========计算平方根===========");
System.out.println(Math.sqrt(9.0)); //3.0
System.out.println(Math.sqrt(2)); //近似等于1.414
//取对应的那个不能超过该数的最大整数(整数对应的double类型)
System.out.println("==========floor 取下限===========");
System.out.println(Math.floor(2.3)); //2.0
System.out.println(Math.floor(-2.3)); //-3.0
System.out.println(Math.floor(2.5));//2.0
System.out.println(Math.floor(-2.5));//-3.0
System.out.println(Math.floor(2.7)); //2.0
System.out.println(Math.floor(-2.7));//-3.0
//不能比该数小,大于等于该数,对应的整数(整数对应的double类型)
System.out.println("==========ceil 取上限===========");
System.out.println(Math.ceil(2.3)); //3.0
System.out.println(Math.ceil(-2.3)); //-2.0
System.out.println(Math.ceil(2.5));//3.0
System.out.println(Math.ceil(-2.5));//-2.0
System.out.println(Math.ceil(2.7)); //3.0
System.out.println(Math.ceil(-2.7));//-2.0
}
}
1.2. 二重循环
什么是二重循环?
循环内部嵌入另外一个循环
特性:外层循环执行一次,内层循环执行一遍
需求:输出一个正方形,从控制台接收宽和高。
public class Test01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入矩形的高(行数):");
int height = input.nextInt();
System.out.print("请输入矩形的宽(一行的*的个数,列数):");
int width = input.nextInt();
//外层循环控制行数
for(int j=0;j<height;j++){
//内层循环控制的一行 *的个数
for(int i=0;i<width;i++){
System.out.print("* ");
}
System.out.println();
}
}
}
需求:生成宽度随机的正方形,边长范围从3~9。
public class Test02 {
public static void main(String[] args) {
//生成随机数
int width = (int)(Math.random()*7)+3;
//外层循环控制行数
for(int j=0;j<width;j++){
//内层循环控制的一行 *的个数
for(int i=0;i<width;i++){
System.out.print("* ");
}
System.out.println();
}
}
}
课堂练习:输出一个三角形,行数从控制台输入 。
*
***
*****
*******
//方式1
行号从0开始
1 0 2*0+1
3 1 2*1+1
5 2 2*2+1
7 3 2*3+1
Int n = input.nextInt();
For(int i=0;i<n;i++){
//每行*的个数有什么规律
For(int j=0 ;j<2*i+1;j++){
}
}
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入三角形的行数:");
int n = input.nextInt();
//[0,3] 当i=0,j=0,j<1 ;当i=1 ,j=0,j<3 j:[0,1,2] ,当i=2 ,j=0,j<5,j:[0,1,2,3,4]
for(int i=0;i<n;i++){
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
//方式2
行号从1开始
1 1 2*1-1
3 2 2*2-1
5 3 2*3-1
7 4 2*4-1
public class Test032 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入三角形的行数:");
int n = input.nextInt();
//i=1 ,j=1,j<=1,j:[1] i=2 ,j=1,j<=3,j:[1,2,3] , i=3 ,j=1,j<=5,j:[1,2,3,4,5]
for(int i=1;i<=n;i++){
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
方式3
public class Test033 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入三角形的行数:");
int n = input.nextInt();
//i=1,j=0,j<1,j:[0] 1个* i=2 ,j=0,j<3 ,j:[0,1,2] 3个* ,i=3 ,j=0,j<5,j:[0,1,2,3,4] 5个*
for(int i=1;i<=n;i++){
for(int j=0;j<2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
课堂练习:输出一个等腰三角形,行数5行 。
方式1:
/**
* 打印等腰三角形
* *的个数 行号 空格的个数(行号的反转再 +1)
* #####* 1 2*0+1 0 5 = 4+1
* ####*** 3 2*1+1 1 4 = 3+1
* ###***** 5 2*2+1 2 3 = 2+1
* ##******* 7 2*3+1 3 2 = 1+1
* #********* 9 2*4+1 4 1 = 0+1
* @author Administrator
*
*/
public class Test04 {
public static void main(String[] args) {
//控制的行数
for(int i=0;i<5;i++){
//先打印空格 ,再打印* i=0,k=5 k>0 k:[5,4,3,2,1] 5个# i=1,k=4,k>0 k:[4,3,2,1] 4个# ,i=2 ,k=3,k>0,k:[3,2,1] 3个#
for(int k=5-i;k>0;k--){
System.out.print("#");
}
//打印*号
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
方式2
public class Test042 {
public static void main(String[] args) {
//控制的行数
for(int i=0;i<5;i++){
//先打印空格 ,再打印* i=0,k=0,k<5,k:[0,1,2,3,4] 5个# ,i=1,k=0,k<4,k:[0,1,2,3] 4个# ,i=2,k=0,k<3,k:[0,1,2] 3个#
for(int k=0;k<5-i;k++){
System.out.print("#");
}
//打印*号
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
课堂练习:输出一个菱形,行数从控制台输入 。
二重循环中出现break,continue ,有什么意义?
1.3. 为什么要用数组
变量如何保存0?
int i = 0;
变量如何保存0,1,2,3,4,5?
int i = “0,1,2,3,4,5”
如何获取第三个数字?
数组是什么:数组是一个变量,存储相同数据类型的一组数据。
1.4. 定义数组
方式一(推荐):
方式二(非主流):
方式三(定义时直接初始化)
注意:数组的大小在定义后无法改变。
1.5. 数组的赋值
如何修改数组的值?
如何访问数组的值
什么是数组下标越界?
如何获得数组的长度?
遍历数组显示数组中的数据
课堂练习:
(1)数组中有12345五个数字,使用for循环遍历数组,输出平均值。
(2)定义一个大小为7的数组,向数组中插入7个0~100的随机数,输出最大值和平均分。
(3)数组中保存了三个人名,按照顺序输出当前三个人名。交换第一个和第三个人名,再次按顺序输出三个人名。
1.6. 数组排序
课堂练习:
定义一个大小为7的数组,向数组中插入7个0~100的随机数,按照升序和降序输出。
手动实现排序算法:冒泡排序
1.7. 冒泡排序
1.8. 数组拷贝
需求:把一个数组中的元素复制到另一个数组
课堂练习:
(1) 把a数组中前一半的元素复制到b数组
(2) 把数组中前一半的元素正序复制到b数组,把后一半的元素倒序复制到b数组
// 数组的复制
//后半段倒序复制到B数组
(3) 定义一个数组,向数组中插入50个0~100的随机数,将其中的偶数复制到另一个数组并升序输出该数组的内容。
1.9. 字符串转数组
课堂练习:
用户在控制台输入5种水果,将5个水果存入数组,随机输出一个水果的名称。如输入:苹果、梨子、香蕉、芒果、水蜜桃,返回“我最喜欢水蜜桃”。
1.10. 二维数组(了解)
二维数组的两种声明方式
第一种:
第二种:
二重循环遍历二维数组
1.11. 作业
(1)《03.选择结构、循环结构-2.doc》和《03.选择结构、循环结构-3.doc》
(2)定义一个数组,向数组中插入20个0~10的随机数,去重并输出。