Java Fundamental day05
来源:互联网 发布:演员知乎 编辑:程序博客网 时间:2024/06/05 07:01
一.程序=算法+数据结构
1)算法:解决问题的流程/步骤(顺序、分支、循环)
2)数据结构:将数据按照某种特定的结构来保存
数怎么存
设计合理的数据结构会导致好的算法
二.数组是一种常见的数据结构:
1)相同数据类型元素的集合
2)是一种数据类型(引用类型)
3)数组的声明:
int[] arr = new int[10];
4)数组的初始化:
int[] arr = new int[4]; //0,0,0,0
int[] arr = {1,4,7,8}; //1,4,7,8
int[] arr = new int[]{1,4,7,8}; //1,4,7,8
int[] arr;
arr = {1,4,7,8}; //编译错误
arr = new int[]{1,4,7,8}; //正确
5)数组的访问:
5.1)通过(数组名.length)可以获取数组的长度
int[] arr = new int[4];
System.out.println(arr.length); //4
5.2)通过下标/索引来访问数组的元素
下标从0开始,最大到(数组名.length-1)
int[] arr = new int[3];
arr[0] = 100; //给arr中的第1个元素赋值为100
arr[1] = 200; //给arr中的第2个元素赋值为200
arr[2] = 300; //给arr中的第3个元素赋值为300
arr[3] = 400; //数组下标越界异常
System.out.println(arr[arr.length-1]); //输出arr的最后一个元素
6)数组的遍历:
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = 100;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
7)数组的复制:
7.1)System.arraycopy(a,1,a1,0,4);a指源数组,1指a中起始下标。a1指目标数组,0指a1的起始下标,4指从a中复制的元素个数。
7.2)int[] a1 = Arrays.copyOf(a,6);a1的长度是6,将a中所有元素全部复制过来,长度大了取前面6个,若不够,用默认值0补充。
a = Arrays.copyOf(a,a.length+1); //扩容,创建一个新的数组a,长度也是新的,将a的元素全部复制过来,同时内存中删除源数组a。
8)数组的排序:
8.1)Arrays.sort(arr); //升序,效率高
8.2)冒泡算法:
8.2.1)四个数冒三轮
8.2.2)每一轮都是从第1个元素开始冒
每一次都是和它的下一元素比
8.2.3)冒出来的就不带它玩了
练习:----------至少重写一次
1.九九乘法表,和金字塔。
2.求数组元素的最大值,并将它放在扩容后的数组最后一个元素的下一个位置
求数组元素的最小值,并将它放在扩容后的数组的第一个位置
3.冒泡排序
1)创建整型数组arr,包含10个元素
每个元素为0到99之间的随机数
输出每一个元素的值
2)冒泡算法方式对arr进行升序排列
3)输出排序后的所有数据
HW:
// 1.质数问题要求使用交互的方式找出从 2 开始到某个数值范围内的所有质数,并输出结果。
// 因为输出的质数可能较多,要求分行输出,每行最多输出 10 个质数。
System.out.print("Input range:2~");
Scanner sc = new Scanner(System.in);
int range = sc.nextInt();
int num = 2;
int count = 0;// 定义个计算器
for (num = 2; num <= range; num++) { // 质数为num,范围为range
boolean flag = true; // 设个开关,true为质数,每次判断num。//还是作用范围
double n = Math.sqrt(num); // 平方根
for (int i = 2; i <= n; i++) {// 用num%2到num的平方根之间的数(如果其平方根都能被整除那本身也能被整除),只要值!=0则i为质数
if (num % i == 0) {// 按顺序来,如果在得0前由一个不为0,就没在里面,
flag = false;
break;
}
}
if (flag) {
System.out.print(num+" ");// "是质数 "
count++;// 第二步
if (count % 10 == 0) {// 每10个换行。
System.out.println();
}
} else {
//System.out.print(num + "不是质数 ");
}
}
System.out.println("\n共有" + count+ "个质数");
// 2.查询数组最小值,并将数组扩容形成新数组
int[] a = new int[10];
for (int i = 0; i <= a.length - 1; i++) {
a[i] = (int) (Math.random() * 100);
System.out.print(a[i] + " ");
}
int max, min;
max = min = a[0];//min为循环变量,肯定要初始化,那么int数组默认值为0,初始化要放数组生成后。
for (int i = 0; i <= a.length - 1; i++) {
if (a[i] > max) {
max = a[i];
} else if (a[i] < min) {
min = a[i];
}
}
System.out.println();
System.out.println("max=" + max);
System.out.println("min=" + min);
// a=Arrays.copyOf(a,a.length+1);
//Arrays.sort(a);
int []b=new int[11];
System.arraycopy(a, 0, b, 1, a.length);
b[0] = min;
for (int i = 0; i <= b.length - 1; i++) {
System.out.print(b[i] + " ");
}
//3.随机生成一个数组并用冒泡排序。
int[] arr = new int[10];
System.out.print("The array is:");
for (int i = 0; i <= arr.length - 1; i++) {
arr[i] = (int) (Math.random() * 100);
System.out.print(arr[i] + " ");
}
System.out.println("\nPlease put the above array with bubble sort order");
System.out.println("--------------冒泡排序 开始--------------");
for (int i = 0; i < arr.length - 1; i++) { //控制轮数length-1
int j=0;
for (j = 0; j <arr.length - 1 - i; j++) { //控制每轮次数length-1-i
if (arr[j]> arr[j + 1]) { //若要降序则前数小于后数
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
//System.out.print(arr[j]+" ");
//得到的arr[j]为最大值,如果只需要排序这里就可以实现。
//但i的范围变成i < arr.length
System.out.println(Arrays.toString(arr));//返回指定数组内容的字符串表示形式。
}
System.out.println("--------------冒泡排序 结束--------------");
/*
System.out.println("数组升序排列:");
for (int i = 0; i <= arr.length - 1; i++) {
System.out.print(arr[i] + " ");
}//在冒泡后,还需遍历/索引才能输出数组。
*/
// 4.找出数组总所有元素的最大值最小值以及求平均值。
System.out.print("System to generate an array composed of 0-9:");
int[] array = new int[10];
int max = array[0];
for (int i = 0; i <= array.length - 1; i++) {
array[i] = (int) (Math.random() * 100);
System.out.print(array[i] + " ");
if (max < array[i]) {
max = array[i];
}
}
System.out.println();
int min = array[0];//min为循环变量,肯定要初始化,那么int数组默认值为0,初始化要放数组生成后。
for (int i = 0; i <= array.length-1; i++) {
if (min > array[i]) {
min = array[i];
}
}
double avg=(max+min)/array.length;
System.out.println("The maximum value in the array:"+max);
System.out.println("The minimum value in the array:"+min);
System.out.println("The Average value in the array:"+avg);
跟上步伐
- Java Fundamental day05
- Java Fundamental day01
- Java Fundamental day02
- Java Fundamental day03
- Java Fundamental day04
- Java Fundamental day06
- JAVA笔记一:FUNDAMENTAL
- 每天学JAVA---day05
- java 学习day05
- java学习day05
- [Java视频笔记]day05
- Java-day05集合
- Java day05 final 关键字
- Java day05 继承 extends
- Java day05 抽象类
- Java基础Day05笔记
- Java OOP day05
- java并发编程day05
- 5个Android开发中比较常见的内存泄漏问题及解决办法
- 开始的开始
- [Haskell on AIZU OJ] 0001-List of Top 3 Hills
- Android基础——适配安卓6.0新权限系统
- leetcode: 11. Container With Most Water
- Java Fundamental day05
- Codeforce div2 #401 E. Hanoi Factory
- 设计模式-元享模式
- Jquery——Day5(工具函数)
- Windows下安装TensorFlow,SoEasy
- Java 内存从分配到泄露
- JavaWeb学习(一)
- 杭电 2016
- Java Web 内幕学习系列 十、深入理解Session与Cookie