欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java多维数组与排序

程序员文章站 2022-08-13 23:15:53
一,数组补充内容import java.util.Arrays;public class Array{static String[] strs = new String[5];public static void main(String[] args){int[] arr = new int[]{7,5,8,2};System.out.println(strs);//访问一下strs的第三个元素System.out.println(strs[2]);//访问一下ar...

一,数组补充内容

import java.util.Arrays; public class Array{ static String[] strs = new String[5]; public static void main(String[] args){ int[] arr = new int[]{7,5,8,2}; System.out.println(strs); //访问一下strs的第三个元素 System.out.println(strs[2]); //访问一下arr的第三个元素 System.out.println(arr[2]); System.out.println("-------------"); String str1 = new String("hello"); strs[0] = str1; //遍历arr //先new一个对象 Array at = new Array(); //调用遍历的方法,传入想要遍历的数组 at.showIntArray(arr); //使用jdk内置的数组打印方法,适合只查看数组 String result = Arrays.toString(arr); System.out.println(result); System.out.println("============================"); } //自定义一个int数组遍历的方法 //[7,5,8,2] public void showIntArray(int[] array){ for (int i=0; i<array.length;i++){ if(i==0){ System.out.print("["+array[i]+","); }else if(i== array.length-1){ System.out.print(array[i]+"]"); }else{ System.out.print(array[i]+","); } } } } 
import java.util.Arrays; public class ArrayTest{ static int[] array = new int[]{2,4,6,8,1,3,5}; //准备一个计数的变量 static int size; public static void main(String[] args){ System.out.println(array); ArrayTest at = new ArrayTest(); Array at2 = new Array(); /* if(array==at.copyArray(array)){
			System.out.println("地址相同,是同一块内存");
		}else{
			System.out.println("地址不同,不是同一个对象");
		}
		at2.showIntArray(at.copyArray(array)); */ /* System.out.println(array.length);
		System.out.println(at.extendArray(array).length); */ /* array = new int[5];
		for(int i=1;i<1000;i++){
			at.add(i);
		}
		System.out.println(Arrays.toString(array)); */ //二维数组的声明和遍历 int[][] two = new int[3][3]; for(int i=0;i<two.length;i++){ for(int j=0;j<two[i].length;j++){ System.out.print(two[i][j]+"\t"); } System.out.println(); } } //数组的拷贝,以int数组为例 //要求:传入一个数组,得到该数组的拷贝数组(两个数组的地址是不一样的) public int[] copyArray(int[] oldArray){ //获得传入数组的长度 int len = oldArray.length; //第一步,声明一个新数组 int[] newArray = new int[len]; //第二步,把oldArray里的每一项取出来对应的赋值给newArray的每一项 for(int i=0;i<len;i++){ newArray[i] = oldArray[i]; } return newArray; } //数组的扩容 //要求一:写一个方法,传入一个int数组,每执行一次 //要求二:写一个方法,传入一个int数组和一个int数字,把int数组扩容int数字个长度 public int[] extendArray(int[] oldArray){ int len = oldArray.length; int[] newArray = new int[len*2]; for(int i=0;i<len;i++){ newArray[i]=oldArray[i]; } return newArray; } public int[] extendArray(int[] oldArray , int count){ int len = oldArray.length; int[] newArray = new int[len+count]; for(int i=0;i<len;i++){ newArray[i]=oldArray[i]; } return newArray; } //需求:给at2声明一个add方法,无限的向array中添加int数 public void add(int i){ //应该先判断array是否已经满了 //思路一:array是从空的开始添加 //可以准备一个计数的变量,每添加一次就记录一次, //当计数器等于array的初始化长度时,则证明满了 if(size == array.length){ array = extendArray(array,1); } array[size] = i; //思路二:array是一开始就有的初始化元素 //判断最后一位元素是否为0,如果不为0则满了 size++; } //根据下标去删除 public void remove(int index){ //删除的时候先判断是否为最后一个元素,如果是直接变为0 //如果不是最后一个元素,要注意把后面的元素向前移位 } } 

一,二维数组

可以理解为数组中保存了数组的类型

{{1,2,3},
{4,5,6},
{7,8,9}}

二维数组的定义方式

int[][] array; 

二维数组初始化

new int[2][3]; new int[2][]; //可以不指定列,但是一定要指定行 

访问

int[2][3] = 10; int[0][0] = 1; 

二维数组实例:
提供一个需求:
我们有一个三层楼的公寓,每一层三间房子,我们现在有六个学生,第一层住两个学生,这两个学生不想连着住,第二层住三个学生,第三层住一个学生,使用二维数组模拟一下住户图
先建立一个student类:

package com.briup.day06; public class Student { //提供成员 //属性 ---> 变量 String name; int age; String gender; //第一次使用一下构造器 public Student() { //如果一个类中没有定义任何的构造器 //则默认提供一个没有参数的构造器 } //给一个可以放名字的构造器 public Student(String name) { this.name = name; } //全参构造器 public Student(String name,int age,String gender) { this.name = name; this.age = age; this.gender = gender; } //方法 public void study() { } public void show() { } //设置名字的方法 public void setName(String newName) { name = newName; } //获取名字的方法 public String getName() { return name; } } 

然后创建Test.java

package com.briup.day06; public class Test { public static void main(String[] args) { Student[][] room = new Student[3][3]; //Student的数组中保存的一定是Student的对象 Student s1 = new Student("tom"); Student s2 = new Student("jerry"); Student s3 = new Student("ben"); Student s4 = new Student("ken"); Student s5 = new Student("lisa"); Student s6 = new Student("ella"); //分配房间 room[0][0] = s1; room[0][2] = s2; room[1][0] = s3; room[1][1] = s4; room[1][2] = s5; room[2][0] = s6; //输出房间的分配图 //如果有人居住,则输出名字 //如果没有人居住,则输出无人居住 for(int i=0;i<room.length;i++) { for(int j=0;j<room.length;j++) { //三目运算符的使用场景 System.out.print((room[i][j]==null?"无人居住":room[i][j].getName())+"\t"); } System.out.println(); } } } 

运行出的结果为

tom	无人居住 jerry	
ben	ken	lisa	
ella 无人居住 无人居住 

二,eclipse的使用

1.使用之前确保jdk是好的
2.eclipse放在非中文非c盘的路径下
3.准备一个你喜欢的找得到的英文路径,创建一个文件夹javacode,作为工作空间(workplace)
4.开始第一个java工程
new—>project—>java project
5.新建一个包
右键src—>new—>package,输入包名
6.在对应的包里新建类

三,排序问题

例子:
数组a [8,3,1,5,3,2,6];
升序数列:[1,2,3,3,5,6,8];
降序数列:[8,6,5,3,3,2,1];

冒泡排序

相邻的两个两个进行比较,根据大小位置交换位置,过程为:
[8,3,1,5,3,2,6]
//第一次循环
[3,8,1,5,3,2,6]
[3,1,8,5,3,2,6]
[3,1,5,8,3,2,6]
[3,1,5,3,8,2,6]
[3,1,5,3,2,8,6]
[3,1,5,3,2,6,8]
//第二次循环
[1,3,5,3,2,6,8]
[1,3,3,5,2,6,8]
[1,3,3,2,5,6,8]
//第三次循环

直到
[1,2,3,3,5,6,8]
数组中进行对比的下标的组合
0 1
1 2
2 3
3 4
4 5
5 6
用程序来实现:

for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-i){ if(a[j]<a[j+1]){ //交换位置(降序) //不使用第三方变量 //1.+= a[j] = a[j]+a[j+1]; a[j+1] = a[j] - a[j+1]; a[j] = a[j] - a[j+1]; //2.^ a[j] = a[j]^a[j+1]; a[j+1] = a[j]^a[j+1]; a[j] = a[j]^a[j+1]; //使用第三方变量 int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } 

实例:

package com.briup.test; //冒泡排序 import java.util.Arrays; //ctrl+shift+o:监测需要导入的包和删除未使用的包 public class SortTest { //定义两个常量 static Boolean UP = true; static Boolean DOWN = false; public static void main(String[] args) { int[] array = new int[] {8,3,1,5,3,2,6}; System.out.println("排序前:"); System.out.println(Arrays.toString(array)); //排序,以升序为例 //	array = sort(array,UP); //	array = sort(array,DOWN);//如果是降序 //jdk有提供的自然排序方法 //	Arrays.sort(array); for(int i=0;i<array.length-1;i++){ for(int j=0;j>array.length-1-i;j++) {//如果需要降序,将循环条件改为j<array.length-1-i if(array[j]<array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } System.out.println("排序后:"); System.out.println(Arrays.toString(array)); } //排序算法的封装 public static int[] sort(int[] array,boolean flag) { //判断一下是升序还是降序 if(flag) { for(int i=0;i<array.length-1;i++){ for(int j=0;j<array.length-1-i;j++) { if(array[j]>array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } }else { for(int i=0;i<array.length-1;i++){ for(int j=0;j<array.length-1-i;j++) { if(array[j]<array[j+1]) { int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } return array; } } 

剩下还有快速排序,希尔排序,插入排序,选择排序,今天暂时没有涉及到.

四,OOP 面向对象编程

类和对象的关系
类是一个相同属性和行为的对象的集合,只是起描述作用
对象是一个类的实际表现
清楚一个类有哪些内容
public class 类名{
类中有哪些成员?
变量
方法:
修饰符:
返回值:
方法名:
参数列表:
抛出异常:throws
方法体:
构造器.一般类中准备一个无参构造器和全参构造器

五,用数组来模拟栈的数据结构

package com.briup.test;

package com.briup.test; import sun.security.provider.certpath.IndexedCollectionCertStore; //使用数组来模拟栈的数据结构 //先进后出 //添加元素从尾部开始添加 //删除元素从尾部开始删除 public class Stack { int[] data; //储存数据 int size;//保存栈的实际长度 //使用构造器做初始化 public Stack() { data = new int[10]; } public Stack(int length) { data = new int[length]; } //入栈的方法 public void in(int i) { //判断栈是否溢出 if(size == data.length) { System.out.println("栈溢出,请检查"); } data[size++] = i; //size++; } //出栈的方法 public int out() { //判断栈是不是空了 if (size == 0) { System.out.println("栈已空,无数据可出"); } int temp = data[size-1]; data[size-1] = 0; size--; return temp; } //修改栈内指定位置的元素 public void change(int index,int number) { //判断index是否再size的范围 if (index<size) { data[index] = number; }else { System.out.println("输入索引有误"); } data[index] = number; } //获取栈的长度 public int size() { return size; } //输出栈的内容 public void show() { for(int i=0;i<size;i++) { System.out.println("当前栈中第"+(i+1)+"个元素是:"+data[i]); } } } 

六,心得

今天的内容感觉比昨天的要简单一些,接受起来相对比较容易,可能是因为之前没有学过数组的相关内容的原因,今天自习时间都用来回顾昨天的内容了,到现在还是有一些地方一知半解,得利用这个周末来好好理清一下数组的相关内容.今天是第一天开始使用工具,也是深深感受到了工具的强大,明天加油!

本文地址:https://blog.csdn.net/lanaiwanqiQAQ/article/details/107700567

相关标签: java