day 09
break和continue
break和continue用于switch-case语句中,但两者作用略有不同
break:跳出循环
continue:结束本次循环
实践
class VariableTest{
public static void main(String[] args) {
for(int i=1;i<=10;i++){
if(i%4==0){
break;
}
System.out.println(i);
}
}
}
这里运行到i=4时,因为i%4==0
,所以直接结束循环,此时再看continue
class VariableTest{
public static void main(String[] args) {
for(int i=1;i<=10;i++){
if(i%4==0){
continue;
}
System.out.println(i);
}
}
}
eclipse使用
安装的话去官网就行,下载zip文件
部分需要需要,修改如下(修改编码为UTF-8)
而后修改字体大小
运行Hello World
首先我们需要去建一个项目
没有这个java project
的直接去new下面那个other里找一下就可以了
然后随便起一个项目名
此时还需要搭建一个package
,直接在左侧右键,而后就出现了new,如下图操作即可
此时就可以去new一个class了,也就是写文件,操作依然是右键
随便写一个名字
书写的话写一个main,而后按ctrl+/
就会出现关键词
此时运行的话右键
数组
定义
数组是多个相同类型的数据按照一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
特点
数组的特点
1、数组是有序排列的
2、数值属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型。
3、创建数组对象会在内存中开辟一整块连续的空间
4、数组的长度一旦确定,就不能修改。
分类
按照维数:一维数组、二维数组、…..
按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
数组初始化
数组初始化之前要先声明,然后初始化的话有两种方式,用代码来简单说一下
方法一
静态初始化
这类的话就是说既定义了长度,也定义了对应的值
public class HelloWorld {
public static void main(String[] args) {
int[] arr;//数组声明
arr=new int[]{1,2,3,4};//数组初始化
}
}
方法二
动态初始化
这类的话就是只定义一个长度,不定义对应的值
public class HelloWorld {
public static void main(String[] args) {
int[] arr;//数组声明
arr=new int[5];
}
}
当然,声明和初始化是可以写在一起的
public class HelloWorld {
public static void main(String[] args) {
int[] arr=new int[5];//数组声明
}
}
如果此时不赋值,直接输出的话,会输出5个0,这是因为数组元素的默认初始化值为0
数组调用
public class HelloWorld {
public static void main(String[] args) {
String[] names = new String[5];//数组声明
names[0]="赵";
names[1]="钱";
names[2]="孙";
names[3]="李";
names[4]="周";
}
}
数组长度与遍历
如何查看数组长度呢,方法是数组名.length
public class HelloWorld {
public static void main(String[] args) {
String[] names = new String[5];//数组声明
names[0]="赵";
names[1]="钱";
names[2]="孙";
names[3]="李";
names[4]="周";
System.out.println(names.length);
}
}
如何遍历数组呢,用循环即可
public class HelloWorld {
public static void main(String[] args) {
String[] names = new String[5];//数组声明
names[0]="赵";
names[1]="钱";
names[2]="孙";
names[3]="李";
names[4]="周";
int i;
for(i=0;i<names.length;i++) {
System.out.println(names[i]);
}
}
}
实践
题目1
找出联系方式
public class HelloWorld {
public static void main(String[] args) {
int[] array = new int[] {0,1,2,3,7,8,9};
int[] index = new int[] {1,6,5,3,6,1,0,4,2,1,3};
String str="";
for(int i=0;i<index.length;i++) {
str +=array[index[i]];
}
System.out.println("联系方式"+str);
}
}
这个要怎么看呢,看循环里是array[index[i]]
,其实也就是个套娃循环的,从i=0开始,此时index[0]为1,array[1]为1,首页联系方式第一位就为1,同理,i=1时,index[1]为6,array[6]为9,第二位为9,这样依次算到最后,就可以得到联系方式
题目2
设计一个程序,输入学生的成绩,并求出最大值,同时输出学生等级,等级评判规则:与最大值差值十分及以下的为A,二十分及以下为B,三十为C,其余为D
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
//1、使用Scanner,读取学生个数
Scanner scanner=new Scanner(System.in);
System.out.print("请输入学生个数");
int number=scanner.nextInt();
//2、创建数组,存储学生成绩,动态初始化。
System.out.println("请输入学生成绩");
int[] score=new int[number];
//3、给数组的元素赋值
for(int i=0;i<number;i++) {
score[i]= scanner.nextInt();
}
//4、获取数组元素的最大值
int max=0;
for(int i=0;i<number;i++) {
if(max<score[i]) {
max=score[i];
}
}
System.out.println("最高分为" + max);
//5、根据每个学生成绩与最大值差值进行等级评分
char level;
for(int i=0;i<number;i++){
if(max-score[i]<=10) {
level='A';
}
else if(max-score[i]<=20) {
level='B';
}
else if(max-score[i]<=30) {
level='C';
}
else {
level='D';
}
System.out.println("student "+i+"score is "+score[i]+" grade is "+level);
}
}
}
day 10
二维数组
类似于一维数组,只不过多了一个[]和{}而已,举个栗子
int[][] arr=new int[][]{{1,2,3},{4,5},{6,7,8}};
数组调用
public class array {
public static void main(String[] args) {
int[][] arr=new int[][]{{1,2,3},{4,5},{6,7,8}};
String[][] arr1 =new String[3][2];
String[][] arr2 =new String[3][];
System.out.print(arr[1][1]);
System.out.print(arr1[2][1]);
}
}
后面为null是因为没赋值,默认的值为null
这个时候我们如果钓鱼arr2会怎样呢
二维数组时,后面的[ ]可以为空,但不能直接调用这个,因为二维是个空指针
查看数组长度与遍历
public class array {
public static void main(String[] args) {
int[][] arr=new int[][]{{1,2,3},{4,5},{6,7,8}};
String[][] arr1 =new String[3][2];
String[][] arr2 =new String[3][];
System.out.println(arr.length);//3,这是因为它把里面的一维数组当做一个整体
System.out.println(arr[0].length);//3,三个数分别为1,2,3
System.out.println(arr[1].length);//2,两个数为4和5
}
}
如何遍历数组呢,用两个for循环即可
public class array {
public static void main(String[] args) {
int[][] arr=new int[][]{{1,2,3},{4,5},{6,7,8}};
String[][] arr1 =new String[3][2];
String[][] arr2 =new String[3][];
for(int i=0;i<(arr.length);i++) {
for(int j=0;j<(arr[i].length);j++) {
System.out.println(arr[i][j]);
}
}
}
}
不同类型下的一维数组的默认初始值
整型:0
浮点型:0.0
char型:0
布尔型:false
引用类型:null
day11
数据结构
数据与数据之间的逻辑关系
集合
一对一
一对多
多对多
还有数据的存储结构
数据的存储结构分为三种
线性表:顺序表(数组)、链表、栈、队列
树形结构:二叉树
图型结构:
数据的算法分为两种
排序算法
搜索算法
数组的复制、反转和查找
复制实践
public class array {
public static void main(String[] args) {
String[] arr1=new String[]{"aa","bb","cc","dd"};
String[] arr2=new String[arr1.length];
for(int i=0;i<arr1.length;i++) {
arr2[i]=arr1[i];
System.out.println(arr1[i]);
System.out.println(arr2[i]);
}
}
}
反转实践
public class array {
public static void main(String[] args) {
String[] arr1=new String[]{"aa","bb","cc","dd","ee","ff"};
String[] arr2=new String[arr1.length];
for(int i=0;i<arr1.length/2;i++) {
String temp=arr1[i];
arr1[i]=arr1[arr1.length-i-1];
arr1[arr1.length-i-1]=temp;
}
for(int i=0;i<arr1.length;i++) {
System.out.println(arr1[i]);
}
}
}
查找实践
枚举法
public class array {
public static void main(String[] args) {
String[] arr1=new String[]{"aa","bb","cc","dd","ee","ff"};
String find="cc";
boolean flag= true;
for(int i =0;i<arr1.length;i++) {
if(find.equals(arr1[i])) {
System.out.println("找到该元素了,位于第"+i+"个");
flag=false;
break;
}
}
if(flag) {
System.out.println("很遗憾,没有找到此元素");
}
}
}
二分法
public class array {
public static void main(String[] args) {
int[] arr1=new int[] {-72,-12,-74,-43,-89,98,49,69,39};
int find=49;
boolean flag= true;
int head=0;//初始首索引
int end=arr1.length-1;//初始末索引
while(head<=end) {
int middle=(head+end)/2;
if(find==arr1[middle]) {
System.out.println("找到了指定元素,该元素为第"+middle+"个");
flag=false;
break;
}
else if(find<arr1[middle]){//中间值在查找值右边,此时另中间值左边一个为最末值
end=middle-1;
}
else {
head=middle+1;
}
}
if(flag) {
System.out.println("很遗憾,没有找到此元素");
}
}
}