发表于: 2018-01-26 00:21:16

1 539


今天完成的事情:

学习java基础数组部分

尝试写了下教程中的几个,内容如下

1.

package com.java.test;

/* 首先创建一个长度是5的数组
* 然后给数组的每一位赋予随机整数
* 通过for循环,遍历数组,找出最小的一个值出来
*/
public class ArrayMix {
//主方法
   public static void main(String[] args){
//声明一个数组a并引用一个新的长度5的数组
       int[] a=new int[5];
       //输出数组长度
       System.out.println("数组长度:"+a.length);
       //数组中的每一位随机100以内的整数
       a[0]=(int)(Math.random()*100);
       a[1]=(int)(Math.random()*100);
       a[2]=(int)(Math.random()*100);
       a[3]=(int)(Math.random()*100);
       a[4]=(int)(Math.random()*100);
      //
       System.out.print("这个数组中的数分别是:");
      //利用for循环输出数组中的值
       for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
       }
System.out.println();
       //看答案前,想到用if选择求出最小值
       if(a[0]<a[1]&a[0]<a[2]&a[0]<a[3]&a[0]<a[4]){
System.out.println("最小值是:"+a[0]);
       }else if(a[1]<a[0]&a[1]<a[2]&a[1]<a[3]&a[0]<a[4]){
System.out.println("最小值是:"+a[1]);
       }else if(a[2]<a[0]&a[2]<a[1]&a[2]<a[3]&a[2]<a[4]){
System.out.println("最小值是:"+a[2]);
       }else if(a[3]<a[0]&a[3]<a[1]&a[3]<a[2]&a[2]<a[4]){
System.out.println("最小值是:"+a[3]);
       }else if(a[4]<a[0]&a[4]<a[1]&a[4]<a[2]&a[4]<a[3]){
System.out.println("最小值是:"+a[4]);
       }
//答案用for循环求最小数
       int b=1000;//定义一个整数类型变量b,初始赋值一个肯定超过数组a中的每一个值的值
       /* 利用for循环嵌套if选择结构,a[0]肯定小于b的初始值,所以b的值成了a[0]的值
        * 继续循环,当下一个值小于b值时接着给b赋值,当大于b值时什么都不做继续循环
        * 知道循环结束时b的值就是数组a中的最小值
        */
       for(int i=0;i<a.length;i++){
if(a[i]<b){
b=a[i];
           }
}
System.out.println("最小的值是:"+b);

   }
}

2.

package com.java.test;

/* 首先创建一个长度是5的数组,并填充随机数。
* 使用for循环或者while循环,对这个数组实现反转效果
*/
public class ReversedArray {
public static void main(String[] args){

//声明并引用一个数组a他的值有五个随机0-100的整数,并打印输出
       int[] a=new int[]{((int)(Math.random()*100)), ((int)(Math.random()*100)),((int)(Math.random()*100)),
               ((int)(Math.random()*100)),((int)(Math.random()*100))};
       System.out.print("这个数组的值:");
       int i;
       for(i=0;i<a.length;i++){
System.out.print(a[i]+",");
       }
System.out.println();
       //使用for循环实现反转
       System.out.print("反转后的数组是:");
       for(i=a.length-1;i>=0;i--){
System.out.print(a[i]+",");
       }
//以上是我自己想的,但是查看答案后发现只是数组中内容倒过来了,数组其实没变
       //正确答案有两种,一种是建立一个新的数组,将数组a的值赋值过去,然后用for循环将数组a中的值反着重新赋值成新数组中的值
       //第二种如下,在这个数组中进行反转
       System.out.println();
       int[] a2=new int[]{((int)(Math.random()*100)), ((int)(Math.random()*100)),((int)(Math.random()*100)),
               ((int)(Math.random()*100)),((int)(Math.random()*100))};
       System.out.print("这个数组的值:");
       for(int i2=0;i2<a2.length;i2++){
System.out.print(a2[i2]+",");
       }
System.out.println();
       System.out.print("反转后的值:");
       //下面这里做的时候有些懵,开始总是仅换了前两位,后来明白了答案中为什么增加了一个变量
       for(int i2=0;i2<a2.length/2;i2++){//这里条件用数组长度/2是因为循环中前面已经换过了
           int b=a2[i2];//这个变量存储原数据,开始并没有想到这里
           a2[i2]=a2[a2.length-1-i2];//这里改变数组值为对应的反转后的值
           a2[a2.length-1-i2]=b;//上一句改变了数组中的值,所以用存储的值
        }
for(int i2=0;i2<a2.length;i2++){
System.out.print(a2[i2]+",");
       }


}
}

3.

package com.java.test;
/*
 冒泡式排序
*/

public class test {
public static void main(String[] args){
int[] a=new int[]{1,8,6,5,9};
       for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
       }
for(int j=1;j<a.length+1;j++){
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
int b = a[i];
                   a[i] = a[i + 1];
                   a[i + 1] = b;
               }

}
}
System.out.println();
       for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
       }
}
}

4.

package com.java.test;
/*
 选择法排序
*/
public class test2 {
public static void main(String[] args){
int[] a={1,6,5,3,7};
       for(int j=0;j<a.length-1;j++){
for(int i=j+1;i<a.length;i++){
if(a[j]>a[i]){
int b=a[i];
               a[i]=a[j];
               a[j]=b;

           }
}
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
       }
}
}


明天计划的事情:

继续java基础的学习,预计本周学完how2java网站里的基础部分。

遇到的问题:

1.第一个练习的时候想了半天怎么用for循环求最小值,就求其次用自己能想到的方法来求最小值即if结构,虽然很傻的方法,但是完成了目的。后来看了答案才想到for循环的方法。

2.第二个练习-数组反转 开始以为仅是输出的时候换个顺序就好,也能显示出效果,但是看了答案后又查了查才明白反转的意思,重新尝试了一下,发现运行时总是前半部分可以成功,后半部分不行,又对照答案思考了挺长时间,明白了答案中定义一个变量的意义。

3.第三个练习冒泡式排序看了教程中的定义,然后尝试自己写,写完后对照答案思路基本相同,但看选择排序的时候对这两中排序方法又分不清了,百度了一下,找到了答案,然后根据这两个练习的代码对照,一句一句的分步思考运行的过程,明白了这两种排序的区别。

收获:

1.int[] a;声明一个整数数组a,这里int代表数组中数据的类型,[]代表这是一个数组,a时数组的名称即标识符。这条语句的意思是“声明”,而不是创建。

2.int[] a;a=new int[5];这条语句的意思是创建一个长度为5的新数组并让数组a引用,初始化数组分配空间和值有三种方式:

   2.1 int[] a=new int[5];a[0]=123;···这里new int[5]中的5是数组的长度,即表示有5个数据,[0]这里代表基0,即数组中第一个数据。以此类推。

   2.2 int[] a=(new int[]){123,123,123} 这里代表了两种,括号内的内容可以省略。{}中的是数组中的数据。

3.Math.random() :表示0-1中的随机浮点数。要表示0-100之间的随机整数要乘以100,并前面加强制转换符(int)。

4.选择法排序:将每一个数据都同另外的所有数据进行比较,进行排序。

5.冒泡法排序:将相邻的两个数据进行比较,进行排序。

6.选择法排序和冒泡法排序的区别:举例来说数组a有5个数据,选择法是a[0]与a[1]、a[2]、a[3]、a[4]都比较一次找出最小的数据,并赋值给a[0];而冒泡法是将a[0]与a[1]比较,大的放后面,然后a[1]与a[2]比较,以此类推。这里不知道是否理解正确,请师兄指正,另外选择法排序只能从最小开始么,从最大可以么?冒泡法只能从最大开始么?



返回列表 返回列表
评论

    分享到