220220

IDEA

集成环境:把代码,编写,编译,执行,调试等多功能综合工具

项目结构:
层级关系: project - module - package - class

   project(项目,工程)中可以创建多个 module
   module(模块) 中可以创建多个 package
   package(包) 中可以创建多个class
=========================
快捷键:ctrl + alt + l : 格式化代码
     alt + enter : 代码修正提醒
     ctrl + d : 向下复制一行
     ctrl + x : 剪切当前行
     ctrl + / : 加入单行注释
     ctrl + shift + / : 加入多行注释
     alt + shift + 向上符号 : 上移当前行
     alt + shift + 向下符号 : 下移当前行
 shift + enter : 回车换行          

数组

数组的动态初始化

数组用于存储 [同种数据类型] 的多个值
==================================
数组定义格式 : 数组类型[] 数组名
数据类型 数组名[]
==================================
数组的动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式 : 数组类型[] 数组名 = new 数据类型[数组长度]
       int[] arr = new int[5];
       System.out.println(arr);//[I@50cbc42f 打印出的是内存地址
=================================
数组元素访问
格式 : 数组名[索引]
索引 : 数组中空间的编号
   特征 1 : 索引从0开始
特征 2 : 索引是连续的
特征 3 : 索引逐次增加,每次加1  
作用:访问数组容器中的空间位置
注意:数组在创建后,即使没有赋值,取出时系统依然会为取出元素赋默认初始值,其中比较特殊的有:
char 初始值为 空字符,什么都没有
boolean 初始值 false
String 初始值 null
       

内存分配

java运行时,需要在内存中分配空间,为了提高运算效率,会对空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式
===================================
栈内存:方法运行时,进入的内存,局部变量都存放在这块内存中
堆内存:new 出来的内容都会进入堆内存,并且会存在地址值
方法区:字节码文件(.class文件)加载时进入的内存
//本地方法栈:调用操作系统相关资源
//寄存器:交给cpu去使用
===================================
注意: 1.每执行一次new操作,堆内存中就会新开辟一个空间地址,空间地址不会发生重复
2.Java中只有值传递,没有引用传递的概念    

image-20220220151310108

image-20220220155831563

 

数组的静态初始化

静态初始化 : 初始化时,就可以指定数组要存储的元素,系统会自动计算出该数组长度
   格式 : 数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3...};
简化格式 : 数据类型[] 变量名 = {数据1,数据2,数据3...};
int[] arr1 = new int[]{11,22,33};
int[] arr2 = {11,22,33};//注意本句的new int[]只是省略了,并不意味着不存在,计算机会识别并自动补全在运算

两种初始化对比

动态初始化 : 手动指定数组长度,有系统给出默认初始化值
静态初始化 : 手动指定数组元素,系统会根据元素个数,计算出数组长度
   
动态初始化适用于 : 只明确元素个数,不明确具体数值的场景
静态初始化适用于 : 需求中已经明确了要操作的具体数据的场景    

数组操作的两个小问题

1.索引越界:访问了数组中不存在的索引
2.空指针异常:访问的数组已经不再指向堆内存的数据
   int[] arr = new int[3];
//把null赋值给数组
arr = null;
//输出元素
System.out.println(arr[0]);
注意:null,空值,引用数据类型的默认值,表示不指向任何有效对象

数组常见操作

数组遍历:将数组中所有数据取出来
获取数组元素数量:数组名.length
   注意:遍历指的是取出数据的过程,并不能简单理解为打印所有数据
================================
//获取最小值
public class TestArrayMin {
   public static void main(String[] args) {
       int[] arr = {12,45,98,73,60};
       
       int min = arr[0];

       for (int i = 1; i < arr.length; i++) {
           if (min > arr[i]){
               min = arr[i];
          }
         //min = min > arr[i] ? arr[i] : min;
      }
       //soutv
       System.out.println("min = " + min);
  }
}
================================
//查找输入值索引数
import java.util.Scanner;

public class DemoArraySearch {
   public static void main(String[] args) {
       int[] arr = new int[]{19,28,37,46,50};
       Scanner sc = new Scanner(System.in);
       System.out.println("请输入数据:");
       int num = sc.nextInt();
       //标记位思想
       int index = -1;

       for (int i = 0; i < arr.length; i++) {
           if (num == arr[i]){
               index = i;
               break;
          }
      }
       System.out.println("index = " + index);
  }
}
============================================
//键入值求和
import java.util.Scanner;

public class DemoArraySum {
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int[] arr = new int[5];
       int sum = 0;

       for (int i = 0; i < arr.length; i++) {
           System.out.println("输入"+(i+1)+"个数据:");
           arr[i] = sc.nextInt();
      }

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

  }
}
============================================
import java.util.Scanner;

public class DemoAvg {
   public static void main(String[] args) {
         /*需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
               选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。

       思路:
           1.定义一个数组,用动态初始化完成数组元素的初始化,长度为6
           2.键盘录入评委分数
           3.由于是6个评委打分,所以,接收评委分数的操作,用循环
           4.求出数组最大值
           5.求出数组最小值
           6.求出数组总和
           7.按照计算规则进行计算得到平均分
           8.输出平均分*/
         //1.定义一个数组,用动态初始化完成数组元素的初始化,长度为6
         int[] arr = new int[6];
         //2.键盘录入评委分数
         Scanner sc = new Scanner(System.in);
         //3.由于是6个评委打分,所以,接收评委分数的操作,用循环
       for (int i = 0; i < arr.length; i++) {
           //判断输入值是否在0-100之内,借用score暂时存储数据
           System.out.println("请输入第"+(i + 1) +"个分数");
           int score = sc.nextInt();

           if(score >= 0 && score <= 100){
               arr[i] = score;
          }else{
               System.out.println("输入错误,请重新输入一个0-100的整数:");
               i--;
          }
      }

       //4.求出数组最大值
       int max = arr[0];
       for (int i = 1; i < arr.length; i++) {
           if (max < arr[i]){
               max = arr[i];
          }
      }

       //5.求出数组最小值
       int min = arr[0];
       for (int i = 1; i < arr.length; i++) {
           if (min > arr[i]){
               min = arr[i];
          }
      }

       //6.求出数组总和
       int sum = 0;
       for (int i = 0; i < arr.length; i++) {
           sum += arr[i];
      }

       //7.按照计算规则进行计算得到平均分
       int avg = (sum - max -min) / (arr.length - 2);

       //8.输出平均分
       System.out.println("最终得到的平均值是 " + avg);
  }
}
   

 

posted @ 2022-02-20 23:23  古月秦风  阅读(78)  评论(0)    收藏  举报