本周主要学习了一维数组和多维数组,在编程中使用数组时常见的一些问题,数组中常用的一些工具类,以及在数组当中的应用。方法中学习了方法的声明、方法的调用、方法的返回值、方法的参数等。
一维数组中主要学习了三种排序方式,分别是冒泡排序、选择排序、插入排序,还有二分查找。
1)冒泡排序
重复地遍历待排序数组,每次比较相邻的两个元素,如果顺序不对则交换它们,直到整个数组排序完成。冒泡排序的核心思想是将最大(或最小)的元素逐步交换到数组的末尾。
package array;
import java.util.Arrays;
import java.util.Random;
public class Section1 {
public static void main(String[] args) {
int[] arr=new int[6];
Random random=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=random.nextInt(100);
}
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length-1; i++) {
for (int j=0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
<p>2)选择排序</p>
<p>第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置直到未排序元素个数为0。</p>
<p>“`java
package array;
import java.util.Arrays;
import java.util.Random;
public class Section1 {
public static void main(String[] args) {
int[] arr=new int[6];
Random random=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=random.nextInt(100);
}
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length-1; i++) {
int min=i;
for (int j=1+i;j<arr.length;j++){
if (arr[j]<arr[min]){
min=j;
}
}
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
System.out.println(Arrays.toString(arr));
}
}
3)插入排序
- 从第一个元素开始,该元素可以认为已经被排序。
- 取下一个元素num,从已排序的元素从后往扫描。
- 如果该元素大于num,则将该元素移到下一位。
- 重复上一个步骤,直到找到已排序元素中小于等于num的元素。
- num插入该元素的后面,如果已排序所有元素都大于num,则将num插入到下标为0的位置。
- 重复步骤2~5。
在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。
但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。
```java
package array;
import java.util.Arrays;
import java.util.Random;
public class Section1 {
public static void main(String[] args) {
int[] arr=new int[6];
Random random=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=random.nextInt(100);
}
System.out.println(Arrays.toString(arr));
for (int i = 1; i < arr.length; i++) {
int current=arr[i];
int index=i-1;
while (index>=0&&arr[index]>current){
arr[index+1]=arr[index];
index--;
}
arr[index+1]=current;
}
System.out.println(Arrays.toString(arr));
}
}
</code></pre>
<p>4)二分查找</p>
<ul>
<li>
<p>对已排序的数组进行二分查找 </p>
</li>
<li>
<p>也叫折半查找,一是数列有序,另一个是数列使用顺序存储结构
<pre><code class="language-java ">package array;</p>
</li>
</ul>
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Section1 {
public static void main(String[] args) {
int[] arr=new int[6];
Random random=new Random();
for (int i = 0; i < arr.length; i++) {
arr[i]=random.nextInt(100);
}
System.out.println(Arrays.toString(arr));
Scanner sc=new Scanner(System.in);
System.out.println("请输入n:");
int n=sc.nextInt();
int left=0,right=arr.length-1;
int index=-1;
while (left<=right){
int middle=(left+right)/2;
if (arr[middle]==n){
index=middle;
break;
}else if (arr[middle]>n){
right=middle-1;
}else {
left=middle+1;
}
}
System.out.println(index);
}
}
</code></pre>
<p>多维数组中主要学习了定义二维数组,为数组中的元素分配内存,数组初始化和数组的遍历。</p>
<p>1)定义</p>
<blockquote>
<p><strong>数据类型[][] 数组名;</strong></p>
<p>或者</p>
<p>数据类型 数组名[][];</p>
</blockquote>
<ul>
<li>[][]表示二维数组,前面的[]表示第一维,后面的[]表示第二维。</li>
<li>[][]放在数组名的前面或者后面都是正确的。 </li>
</ul>
<p>2)为二维数组元素分配内存 </p>
<ul>
<li>二维数组实际上是一个一维数组,这个一组数组的每一个元素又是一个一维数组。</li>
</ul>
<p><img alt="img" src="https://img-blog.csdn.net/20151106142824631" /></p>
<p>3)二维数组的遍历</p>
<p>```java
package array;
public class Section1 {
public static void main(String[] args) {
/
定义3个班级,第1个班级2名学生,第2个班级3名学生,第3个班级2名学生
/
int[][] scores={
{67,75},
{78,82,93},
{71,72},
};
//遍历二维数组,计算每个班的总成绩
for (int i = 0; i < scores.length; i++) {
int sum=0;
for (int j = 0; j < scores[i].length; j++) {
sum=sum+scores[i][j];
}
System.out.println((i+1)+"班"+"总成绩"+sum);
}
}
}
```
二、感受
学习的内容变得越来越复杂,越来越有种吃力的感觉,上课偶尔会集中不了注意力。
跟周围的同学关系变得越来越融洽,看到别人的成绩和进步自己会更努力的加把劲赶上去。
最明显的进步就是逻辑思维变得好了很多,做题的时候不会再一头雾水,看到题目脑子里会有明显的思路。
但是感觉也越来越有压力,以前对任何考试都没有多大感觉,现在要考试心里会有明显的压力,担心自己付出的努力得不到回报,感觉目前这种心态很影响一天的学习状态,会尽快调整好自己的状态,不要压力过大。
相比于上周,上次选择题错了八道,这次错了四道,有所进步就要有所奖励,以后每次考试选择题错五道以内就奖励自己一部电影,当然顺便奖励自己一顿大餐,放松心情有利于下周的学习状态。
三、问题
在平时做题的过程中也遇到了很多问题,但也相继解决了。
考试中最大的问题还是粗心,手写代码时特别容易出错,特别是到后面逻辑越来越不清晰。
1.下列变量定义错误的是
int a;没有错误!没有错误!没有错误!
float f=9.8后面应该加小写f。
7.
int x=0;
for(;(x==0)&(++x>0);x++);
++x=1>0,没有循环体,x++把1提出来,x变成2,x==0不满足,++x=3
9.
java
int i=10;
do{
i=i/2;
}while(i-->1);
System.out.println(i);
i=i/2=5;i>1;i--=4;
i=i/2=2;i>1;i--=0;
i=1/2=0;i--=-1;
powered by kaifamiao