开发喵星球

姬丽丽

周报

日期:2023/08/07 ~ 2023/08/12

一、本周回顾

本周主要学习了一维数组和多维数组,在编程中使用数组时常见的一些问题,数组中常用的一些工具类,以及在数组当中的应用。方法中学习了方法的声明、方法的调用、方法的返回值、方法的参数等。

一维数组中主要学习了三种排序方式,分别是冒泡排序、选择排序、插入排序,还有二分查找。

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); }
}

}
```

二、感受

学习的内容变得越来越复杂,越来越有种吃力的感觉,上课偶尔会集中不了注意力。

跟周围的同学关系变得越来越融洽,看到别人的成绩和进步自己会更努力的加把劲赶上去。

最明显的进步就是逻辑思维变得好了很多,做题的时候不会再一头雾水,看到题目脑子里会有明显的思路。

但是感觉也越来越有压力,以前对任何考试都没有多大感觉,现在要考试心里会有明显的压力,担心自己付出的努力得不到回报,感觉目前这种心态很影响一天的学习状态,会尽快调整好自己的状态,不要压力过大。

相比于上周,上次选择题错了八道,这次错了四道,有所进步就要有所奖励,以后每次考试选择题错五道以内就奖励自己一部电影,当然顺便奖励自己一顿大餐,放松心情有利于下周的学习状态。

acbb354b511ef8a98a2487aba9fb000

image-20230813163903558

三、问题

在平时做题的过程中也遇到了很多问题,但也相继解决了。

考试中最大的问题还是粗心,手写代码时特别容易出错,特别是到后面逻辑越来越不清晰。

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;

   
分类:学员日志 作者:开发喵 发表于:2023-08-14 04:18:26 阅读量:101
<<  


powered by kaifamiao