六、数组
7Arrays
利用Java的工具类来对数组进行操作。
import java.util.Arrays; 调用工具类
之后使用内部方法,对数组进行操作
import java.util.Arrays;
复制
int[] b = Arrays.copyOfRange(源数组,起始位置,取不到位置);
转化成字符串
String s = Arrays.toString(b);
注意,需要输出s才能在控制台中测试。
排序
Arrays.sort(a);
注意,排序后测试需要System.out.println(Arrays.toString(a));输出测试。
搜索
Array.binarySearch(a,50);
参数为搜索的数组,以及所需的数字。注意,使用前需要先Arrays.sort(a);
对a进行排序,返回一个int类型值
判定数组是否相同
Arrays.equal(a,b);返回一个布尔类型值
填充
Arrays.fill(a,5);数组内所有位置填充成5
另外:关于两个数组合并的逻辑
int[] a3 = new int[a1.length+a2.length];
System.arraycopy(a1,0,a3,0,a1.length);
System.arraycopy(a2,0,a3,a1.length,a2.length);
System.out.println(Arrays.toString(a3));
题目:对二维数组进行排序
import java.util.Arrays; import java.util.Scanner; import java.lang.Math; public class HelloWorld{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.println("请输入你所需要的的是几行几列的数组"); int x =s.nextInt(); System.out.println(x+"行"); int y =s.nextInt(); System.out.println(y+"列");
int[][] a = new int[x][y]; for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ a[i][j]=(int)(Math.random()*100); System.out.print("\t"+a[i][j]); } System.out.println("\r\n"); } //化为一维数组,再排序 int[] aall =new int [x*y]; System.out.println(Arrays.toString(aall)+"\t"+a.length+"\t"+a[1].length); for(int i=0;i<a.length;i++){ System.arraycopy(a[i],0,aall,i*y,a[i].length); } System.out.println(Arrays.toString(aall)); Arrays.sort(aall); System.out.println(Arrays.toString(aall)); //排序完后返回一维数组 for(int i=0;i<a.length;i++){ System.arraycopy(aall,i*a[i].length,a[i],0,a[i].length); } for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ System.out.print("\t"+a[i][j]); } System.out.println("\r\n"); } } } |
七、类与对象
1引用
在初学时,我理解错了定义对象的含义。Hero aqua = new Hero();,把左边误认为,aqua是对象,右边是类。其实,左边是引用,右边是对象。实际含义是aqua是一个引用,指向新建的Hero对象的。总而言之,基于一个类可以创建多个对象,而可以新建一个类型相同的引用,通过这个引用来使用此对象。
例如Hero h1 = new Hero();Hero h2 = h1;那么两者是指向同一个对象的。这就是多个引用,一个对象。
但是Hero h1 = new Hero();Hero h2 = new Hero();二者就是分别指向不同对象了。
还可以Hero h1 = new Hero();h1 = new Hero();那h1就不再指向第一个对象,而是指向第二个了。这就是一个引用,多个对象。
2继承
子类继承父类,关键字extends
public calss son extends father{}
子类可继承父类的属性、方法,还可以拥有自己的新属性、新方法。
3重载
重载是动态定义变量。一种是写多个方法,每个方法传递的参数数量、类型不同。还有一种是设置可变数量的参数,使用操作数组的方式,方法内使用for循环
第一种,在类中写重载方法(参数数量或参数类型不同)
void heal(Hero h){
System.out.println("为"+h.name+"回血");
}
void heal(Hero h,int hp){
System.out.println("为"+h.name+"回"+hp+"的血");
}
第二种,可变数量参数
void heal(Hero...heros){
for(int i =0;i<heros.length;i++){
System.out.println("为"+heros[i].name+"回血");
}
}
之后测试
Hero h1 = new Hero();
Hero h2 = new Hero();
h2.name="aqua";
Hero h3 = new Hero();
h3.name="ajax";
Hero h4 = new Hero();
h4.name="equal";
h1.heal(h2);
h1.heal(h2,1000);
h1.heal(h2,h3,h4);
4构造方法
通过一个类创建一个对象的过程叫做实例化,是通过调用构造方法,即构造器来完成的。
构造方法名与类名相同。如果不自己写的话,会默认构造一个隐式的空构造。自己写还可以对这个函数进行重载。
注意格式
public Hero(){} 构造方法名与类名一致,连类型也一致。