idea、数组
idea项目结构
idea中HelloWorld
package cn.wang.kuaijiejian;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
idea中内容辅助和快捷方式
package cn.wang.kuaijiejian;
/*
快速生成语句
快速生成main()方法:psvm,回车
快速生成输出语句:sout,回车
内容辅助键:Ctrl + Alt + space(内容提示,代码补全)
快捷键
单行注释代码:选中代码,Ctrl + /,再来一次,取消注释
多行注释代码:选中代码,Ctrl + shift + /,再来一次,取消注释
复制一行代码:选中代码,Ctrl + d
删除一行代码:选中代码,Ctrl + y
移动一行代码:选中代码,Alt + shift + 上下键
格式化:Ctrl + Alt + L
for循环: fori
智能修复错误:Alt + enter
* */
public class OperatorDemo {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
数组的定义格式
package cn.wang.arraay;
/*
* 数组定义:是一种用于存储多个相同类型数据的存储模型
*
* 格式一:数据类型[] 变量名
* 范例: int[] arr
* 解释:定义了一个int类型的数组,数组名是arr(推荐使用格式一)
*
* 格式二:数据类型 变量名[]
范例: int arr[]
解释:定义了一个int类型的变量,变量名是arr数组
数组初始化:为数组中的数组元素分配内存空间,并为每个数组元素赋值
方式:动态初始化
初始化时只定义数组长度,由系统为数组分配初始值
格式:数据类型[] 变量名 = new 数据类型[数组长度];
范例:int[] arr = new int[3];
静态初始化
初始化时指定每个数组元素的的初始值,由系统决定数组长度
格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,...}
范例:int[] arr2 = new int[]{1,2,3}
简化格式:数据类型[] 变量名 = {数据1,数据2,数据3,...}(推荐使用)
范例:int[] arr2 = {1,2,3}
* */
public class ArrayDemo {
public static void main(String[] args) {
//动态初始化数组
int[] arr = new int[3];
//静态初始化数组
int[] arr2 = new int[]{4,5,6};
//char[] arr1 = new char[2];
/*
左边:
int :说明数组中的元素类型时int类型
[] :说明这是一个数组
arr :这是数组名称
右边:
new :为数组申请内存空间
int :说明数组中的元素类型时int类型
[] :说明这是一个数组
3 :数组长度,就是数组中元素的个数
*/
//赋值
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//arr1[0] = 'A';
//打印输出
System.out.println(arr);//内存地址
System.out.println(arr[0]);//1
System.out.println(arr[1]);//2
System.out.println(arr[2]);//3
System.out.println("========");
System.out.println(arr2);//内存地址
System.out.println(arr2[0]);//4
System.out.println(arr2[1]);//5
System.out.println(arr2[2]);//6
//System.out.println(arr1);
//System.out.println(arr1[0]);
//System.out.println(arr1[1]);
}
}
数组内存分配
package cn.wang.arraay;
/*
当多个数组指向相同
*/
public class ArrayDemo02 {
public static void main(String[] args) {
//数组动态初始化
int[] arr = new int[3];
//赋值
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//打印输出
System.out.println(arr);//内存地址
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("========");
//定义第二个数组指向第一个数组的内存地址
int[] arr2 = arr;
//赋值
arr2[0] = 4;
arr2[1] = 5;
arr2[2] = 6;
System.out.println(arr);//内存地址未变
System.out.println(arr[0]);//*值发生了变化* 4
System.out.println("========");
System.out.println(arr2);//内存地址未变
System.out.println(arr2[0]);//4
System.out.println(arr2[1]);//5
System.out.println(arr2[2]);//6
}
}
数组操作的两个常见问题
package cn.wang.arraay;
/*
数组中常见的两个问题
索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
空指针异常:访问的数组已经不再指向堆内存的数据,超出空指针异常
null:空值,引用数据类型的默认值,便是不指向任何有效对象
*/
public class ArrayProblem {
public static void main(String[] args) {
/*
int[] arr = new int[3];
System.out.println(arr[3]);//报错ArrayIndexOutOfBoundsException
int[] arr1 = new int[3];
arr1 = null;
System.out.println(arr1[0]);//报错NullPointerException
*/
}
}
遍历
package cn.wang.arraay;
/*
遍历/迭代:逐个操作数组中的元素
获取数组长度:数组名.length
格式:数据类型 数组名 = {..........}
for (int i = 0; i < 数组名.length; i++) {
//对arr[i]进行操作
}
*/
public class LengthDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
//遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("======");
double[] arr1 = {1.1, 1.2, 1.3};
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
System.out.println("======");
//逆向遍历
int[] arr2 = {1, 2, 3};
for (int i = arr2.length-1; i >= 0; i--) {
System.out.println(arr2[i]);
}
}
}
最大值
package cn.wang.arraay;
/*
年龄最大值:利用数组,找到这些年龄人中(63,68,39,44,8,9,4,15)年龄最大的,并输出
*/
public class MaxAge {
public static void main(String[] args) {
//创建数组
int[] age = {63,68,39,44,8,9,4,15};
int max = 0;
//遍历数组
for (int i = 0;i < age.length;i++){
max = max > age[i] ? max : age[i];
}
System.out.println("年龄最大的是:" + max);//68
}
}
习题
第一题:分析以下需求并实现
看程序说结果,请不要提前运行
public class Test03_01 {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
int[] temp1 = arr1;
int[] temp2 = arr1;
System.out.println("通过temp1取出数组值: ");
for(int i = 0;i<temp1.length;i++) {
System.out.print(temp1[i]+" ");
}
System.out.println();
System.out.println("通过temp2取出数组值: ");
for(int i = 0;i<temp2.length;i++) {
System.out.print(temp2[i]+" ");
}
System.out.println();
temp1[2] = 9;
System.out.println("通过temp1取出数组值: ");
for(int i = 0;i<temp1.length;i++) {
System.out.print(temp1[i]+" ");
}
System.out.println();
System.out.println("通过temp2取出数组值: ");
for(int i = 0;i<temp2.length;i++) {
System.out.print(temp2[i]+" ");
}
System.out.println();
}
}
第二题:分析以下需求并实现
看程序说结果,请不要提前运行
public class Test03_02 {
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5};
int[] arr2 = {5,6,7};
int[] temp = arr1;
System.out.println("通过temp取出arr1中的元素: ");
for(int i = 0;i<temp.length;i++) {
System.out.print(temp[i]+" ");
}
temp = arr2;
System.out.println("通过temp取出arr2中的元素: ");
for(int i = 0;i<temp.length;i++) {
System.out.print(temp[i]+" ");
}
}
}
第三题:
1.定义一个长度为10的int类型数组,元素值使用随机数生成(范围为50-80)
2.打印该数组中满足个位和十位不包含7的元素。
第四题:分析以下需求并实现
1.定义一个用于存放班级分数的数组 int[] score;数组长度为5,并使用随机数(范围为0-100)为数组赋值
2.求出班级不及格人数(分数低于60分的就是不及格)
3.求出班级的平均分
4.求出班级的总分数
昨日习题答案
第一题:分析以下需求并实现
public class Test01 {
public static void main(String[] args) {
for(int x=1; x<=10; x++) {
if(x%3==0) {
//()在此处填写代码
}
System.out.println("Java基础班");
}
}
}
问题:
1.想在控制台输出2次:"Java基础班" 括号()里面应该填写什么? break
2.想在控制台输出7次:"Java基础班" 括号()里面应该填写什么? continue
3.想在控制台输出13次:"Java基础班" 括号()里面应该填写什么? System.out.println("Java基础班");
第二题:分析以下需求并实现
1.打印1到100之内的整数,但数字中包含9的要跳过
2.每行输出5个满足条件的数,之间用空格分隔
3.如:1 2 3 4 5
public class Demo03 {
public static void main(String[] args) {
int i = 0;
for(int x=1; x<=100; x++) {
int k = x % 10;
int j = x / 10 % 10;
if(k==9 || j==9){
continue;
}else{
i++;
System.out.print(x + " ");
if(i % 5 == 0){
System.out.println();
}
}
}
}
}
第三题:分析以下需求,并用代码实现:
1.按照从大到小的顺序输出四位数中的个位+百位=十位+千位 的数字及个数
2.每行输出5个满足条件的数,之间用空格分隔
3.如:9999 9988 9977 9966 9955
public class Demo04 {
public static void main(String[] args) {
int i = 0;
for(int x=9999; x>=1000; x--) {
int a = x % 10;//个位
int b = x / 10 % 10;//十位
int c = x / 100 % 10;//百位
int d = x / 1000;//千位
int e = a + c;
int f = b + d;
if(e == f){
i++;
System.out.print(x + " ");
if(i % 5 == 0){
System.out.println();
}
}
System.out.println("个数:" +i);
}
}
}
第五题:
打印四行五列的星星
*****
*****
*****
*****
public class Demo05 {
public static void main(String[] args) {
int i = 0;
for(int x=0; x<20; x++)
{
i++;
System.out.print("*");
if(i % 5 == 0){
System.out.println();
}
}
}
}