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





跟上步伐

0 0
原创粉丝点击