目录
动态初始化: 数据类型 [] 数组名称 = new 数据类型 [长度];
学习目标:
- Java 数组的定义
- Java 数组的声明
- 数组的优势与局限
- 数组的遍历访问(普通循环,增强for循环)
- 数组元素的顺序查找
- 数组元素的冒泡法排序
- Arrays工具类的使用
- 二维数组
学习内容:
Java 数组的定义
数组是一组相同数据类型元素的集合。在Java中数组属于引用类型,即数组是一个对象。这里的数据类型不仅含八大基本数据类型,还包含引用数据类型,如数组里面可以存数组,数组里面可以存放字符串。
Java 数组的声明
声明方式:
1.数据类型 [] 数组名称 eg:int [] a; //推荐,没有指向具体的一块堆内存
2数据类型 数组名称 [] eg:int a [];
数组的初始化:
动态初始化: 数据类型 [] 数组名称 = new 数据类型 [长度];
int [] arr = new int [10];然后通过下标索引为每个元素赋值。
静态初始化:在定义数组的同时设置元素的值。
简化格式:
数据类型 [] 数组名称 = {值1,值2,…};
完整格式:
数据类型 [] 数组名称 = new 数据类型 [] {值1,值2,…};
数组的默认初始化:
int[] arr=new int[2]; //数组的元素值这里被默认初始化为0
匿名数组
利用完整格式,可以方便使用匿名数组。匿名数组就是没有名称的数组,本质是一块没有栈内存指向的堆内存。只能使用一次,用完就被回收了。
public class Test
{
public static void main(String[] args)
{
int[] arr = init();
for(int i=0; i < arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static int[] init()
{
return new int[]{1,2,3,4,5};//方法返回一个匿名数组
}
}
数组的优势与局限
优点:
1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便
缺点:
1、根据内容查找元素速度慢
2、数组的大小一经确定不能改变。
3、数组只能存储一种类型的数据
4、增加、删除元素效率慢
5、未封装任何方法,所有操作都需要用户自己定义。
LintCode刷题
·判断是否为完全数
输入n后,从1开始向 n-1遍历,当可以被n整除时,那么就是n的因子,累加即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int compare=0;
for (int i =1;i<n;i++){
if (n%i==0){
compare+=i;
}
}
if (compare==n){
System.out.println("is perfect number");
}else
System.out.println("not perfect number");
}
}
·求小写字母个数
用isLowerCase判断满足++即可,详情字符串中大小写变换
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str=scanner.next();
char[] chars=str.toCharArray();
int lowerNumber=0;
for (int i=0;i<chars.length;i++){
if (Character.isLowerCase(chars[i])){
lowerNumber++;
}
}
System.out.println(lowerNumber);
}
}
·求a的b次方
运用Math.pow()即可,详情Math方法整理,注意返回类型是0.0
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a =scanner.nextInt();
int b =scanner.nextInt();
System.out.println((int)Math.pow(a,b));
}
}
·break跳出循环
break关键字的使用
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
for (int i = 1; i <= n; i++) {
System.out.println(i);
if (i==m)break;
}
}
}
·打印素数
·打印素数
在外面定义一个方法来判断传入的是不是素数,然后再由for循环遍历把是的输出即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
for (int i =2;i<=n;i++){
if (isprime(i)){
System.out.println(i);
}
}
}
public static boolean isprime(int number){
if (number==2) { return true; }
int n=0;
for (int i=2;i<number;i++){
if (number%i==0) n++;
}
return n==0;
}
}
·计算某个人出生的天数
定义一个输入格式,把按照输入格式输入的转换为两个日期,调用getTime()方法活得两个的时间,但是是毫秒的,在进行转换成天数后相减返回即可。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Solution {
public long getTime(String birthday, String nowTime)
throws ParseException {
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
Date date=simpleDateFormat.parse(birthday);
long time1= date.getTime();
Date date2=simpleDateFormat.parse(nowTime);
long time2= date2.getTime();
long time= (time2-time1)/1000/60/60/24;
return time;
}
}
学习时间:
2021-8-16 9:00-10:30、15:28-17:33
学习产出:
刷题*6
学习博客*1