Arrays类中方法

c#: Arrays.Sort(数组):
数组内包含元素是值类型:进行排序
数组内包含是引用类型:让元素实现IComparable接口


java: Array.sort(数组):
数组内包含元素是值类型:进行排序
数组内包含是引用类型:让元素实现Comparable接口

在数组寻找元素:
解法一:利用循环。
解法二:
Arrays的方法
2;static int binarySearch(xxx[] a,xxx v) //xxx表示数据类型
a: 类型为int,long,short,char,byte,boolean,float或double的数组,并且a数组必须是已经排序的数组
v: 为和a 相同类型的变量
该方法是利用二分搜索法在数组中去找和v相同值的元素,找到,就返回其下标,否则,返回负值r, -r-1是如果将要查找的数据放在数组中,他应该存在的位置

针对值类型:直接排序
int[] cs=new int[]{11,5,23,7};
Arrays.sort(cs);
int x=Arrays.binarySearch(cs, 55);
System.out.println(x);
针对引用类型:对象数组中每个元素以及要查询的元素必须实现Comparable接口。

总结:
要查询的对象中必须包含排序时,比较的属性数据。
要同时比较多个属性,排序时,给出多个比较的条件
eg:
如果要查询的对象中只包含身高,排序的条件中只有身高的比较。

排序的条件中只有身高的比较:查询的对象中只要包含身高就可以找到。

排序的条件中身高和姓名的比较:查询的对象中必须包含身高和姓名才能找到。


范例:
package net.mypack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;


public class Test
{
public static void main(String[] args)
{
Student[] ss=new Student[3];
Student s1=new Student();
s1.setName("tang");
s1.setShengao(1.89);
ss[0]=s1;

Student s2=new Student();
s2.setName("shao");
s2.setShengao(1.71);
ss[1]=s2;

Student s3=new Student();
s3.setName("kun");
s3.setShengao(1.75);
ss[2]=s3;

Student cha=new Student();
cha.setName("eouueruuuu"); //只给名字,找不到
cha.setShengao(1.75);//只给身高,找到
//总结:要查询的对象中必须包含排序时,比较的属性数据。

Arrays.sort(ss);
int x=Arrays.binarySearch(ss, cha);

System.out.println(x);


}
}
enum 排序
{
升序{public int getPai(){return -1;}},
降序{public int getPai(){return 1;}};
public abstract int getPai();
}
class Student implements Comparable
{
public static 排序 pp=排序.升序;
private String name;
private double shengao;
public String getName() {
return name;
}
public void setName(String name) {
https://www.360docs.net/doc/a213819596.html, = name;
}
public double getShengao() {
return shengao;
}
public void setShengao(double shengao) {
this.shengao = shengao;
}
public int compareTo(Object o) {
if (o instanceof Student) {
Student no= (Student)o;
if

(shengao{
return -1;
}
else if(shengao>no.shengao && https://www.360docs.net/doc/a213819596.html,pareTo(https://www.360docs.net/doc/a213819596.html,)==1)
{
return 1;
}
else if(shengao==no.shengao && https://www.360docs.net/doc/a213819596.html,pareTo(https://www.360docs.net/doc/a213819596.html,)==0)
{
return 0;
}
else
{
return -1;
}
}
else
{
Exception e=new Exception("类别出现问题");
System.exit(0);
return 0;
}
}
public static 排序 getPp() {
return pp;
}
public static void setPp(排序 pp) {
Student.pp = pp;
}
}

课后:
根据学校或姓名或年龄或以上任意组合完成学生查找。


课后:
根据学生年龄查找所有的学生。



Arrays的其他方法P140
数组可以和ArrayList完成相互导入
数组==>ArrayList : List list=Arrays.asList(数组); list是ArrayList实现的接口。
ArrayList==>数组: Object[] o=ArrayList对象.toArray();
范例:
String[] cs=new String[]{"11","32","67","889"};
List list=Arrays.asList(cs);
System.out.println(list);
/*for(int i=0;i{
System.out.println(list.get(i));
}*/

Arrays类中的equals()方法介绍
判断两个数组是否相同 (要每个元素都相同,才返回true)
public static boolean equals(int[]?a, int[]?a2)
public static boolean equals(boolean[]?a, boolean[]?a2)
public static boolean equals(char[]?a, char[]?a2)
public static boolean equals(byte[]?a, byte[]?a2)
public static boolean equals(boolean[]?a, boolean[]?a2)
public static boolean equals(double[]?a, double[]?a2)
public static boolean equals(float[]?a, float[]?a2)
import java.util.*;
import javax.swing.*;
public class Test5
{
public static void main(String[] args)
{
String[] a={"aaa","bbb","ccc","ddd","eee"};
String[] b={"aaa","bbb","ccc","ddd","eee1"};
System.out.println(Arrays.equals(a,b));
}
}
两个数组相同:
1. 元素个数相同,类型相同。
2. 每个下标对应的元素相同。
int[] cs1=new int[]{22,33,5,67};
int[] cs2=new int[]{33,22,5,67};
boolean b=Arrays.equals(cs1, cs2);
System.out.println(b);

对象数组?
只有两个数组中包含的对应的元素对象相同,才返回true;
范例:
package net.mypack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class Test
{
public static void main(String[] args)
{
Student[] ss=new Student[3];
Student s1=new Student();
s1.setName("tang");
s1.setShengao(1.89);
ss[0]=s1;

Student s2=new Student();
s2.setName("shao");
s2.setShengao(1.71);
ss[1]=s2;

Student s3=new Student();
s3.setName("kun");
s3.setShengao(1.75);
ss[2]=s3;



Student[] ss1=new Student[3];
ss1[0]=s1;
ss1[1]=s2;
ss1[2]=s3;

/*Student s4=new Student();
s4.setName("tang");
s4

.setShengao(1.89);
ss1[0]=s4;

Student s5=new Student();
s5.setName("shao");
s5.setShengao(1.71);
ss1[1]=s5;

Student s6=new Student();
s6.setName("kun");
s6.setShengao(1.75);
ss1[2]=s6;*/
System.out.println(Arrays.equals(ss, ss1));

}
}
enum 排序
{
升序{public int getPai(){return -1;}},
降序{public int getPai(){return 1;}};
public abstract int getPai();
}
class Student implements Comparable
{
public static 排序 pp=排序.升序;
private String name;
private double shengao;
public String getName() {
return name;
}
public void setName(String name) {
https://www.360docs.net/doc/a213819596.html, = name;
}
public double getShengao() {
return shengao;
}
public void setShengao(double shengao) {
this.shengao = shengao;
}
public int compareTo(Object o) {
if (o instanceof Student) {
Student no= (Student)o;
if(shengao{
return -1;
}
else if(shengao>no.shengao && https://www.360docs.net/doc/a213819596.html,pareTo(https://www.360docs.net/doc/a213819596.html,)==1)
{
return 1;
}
else if(shengao==no.shengao && https://www.360docs.net/doc/a213819596.html,pareTo(https://www.360docs.net/doc/a213819596.html,)==0)
{
return 0;
}
else
{
return -1;
}
}
else
{
Exception e=new Exception("类别出现问题");
System.exit(0);
return 0;
}
}
public static 排序 getPp() {
return pp;
}
public static void setPp(排序 pp) {
Student.pp = pp;
}
}


一次性插入数组的所有的元素一样的值(只能使用单一的值来填充数组,如果想用随机数生成的若干数字填充数组,fill()方法将无能为力了)
public static void fill(boolean[]?a, boolean?val)
public static void fill(long[]?a, long?val)
public static void fill(int[]?a, int?val)

import java.util.*;
public class Test5
{
public static void main(String[] args)
{
String[] a=new String[4];
boolean[] b=new boolean[4];
char[] c=new char[4];
Arrays.fill(c,'a');
int[] d=new int[4];
Arrays.fill(d,1);
Arrays.fill(b,true);
Arrays.fill(a,"love");
for(int i=0;i{
System.out.println(c[i]);
}
System.out.println(Arrays.asList(a));
}
}

一次性插入数组的所有的元素一样的值(只能使用单一的值来填充数组,如果想用随机数生成的若干数字填充数组,fill()方法将无能为力了)
public static void fill(boolean[]?a, boolean?val)
public static void fill(long[]?a, long?val)
public static void fill(int[]?a, int?val)

import java.util.*;
public class Test5
{
public static void main(String[] args)
{
String[] a=new String[4];
boolean[] b=new boolean[4];
char[] c=new char[4];
Arrays.fill(c,'a');
int[] d=new int[4];
Arrays.fill(d,1);
Arrays.fill(b,true);
Arrays.fill(a,"love

");
for(int i=0;i{
System.out.println(c[i]);
}
System.out.println(Arrays.asList(a));
}
}

public static void main(String[] args)
{
int[] cs=new int[3];
Arrays.fill(cs, 33);
for(int i:cs)
{
System.out.println(i);
}

}


多维数组P144
java中只有嵌套数组
二维:一维包含一维数组。
声明:
public class Test
{
public static void main(String[] args)
{
int[][] cs=new int[2][3];
Arrays.fill(cs[0], 11);
Arrays.fill(cs[1], 33);
for(int i=0;i{
for(int j=0;j{
System.out.println(cs[i][j]);
}
}

}
}

课堂作业:
查字典游戏的二维数组改编


不规则数组 P154



课后作业
请大家改编上面学生多项成绩统计的程序
要求:
1:学生人数没有限制
2: 每个学生的成绩个数不一样
3:求出每个学生的总分,平均分,有几门成绩
4. 分数必须做出验证。

加深:
补充:
对上面的程序进行修改:
如果老师在输入学生名或某个学生分数的时候,不慎输错,当他点击输入框上的撤消按钮时,让老师作出选择(退出或撤消这一次的输入),如果老师选择撤消,则只将这一次的所有输入去掉,又回到让老师输入学生姓名的地方
有对用户输入的信息进行验证的程序(比如名字不能为空,分数中不能有两个小数点..)


三维数组P174

选作:利用三维数组和类进行改编。
程序加深:
将上面的程序改成无数学生的成绩录入(每个学生的考试科目为3门,每一门的考试可能有两种成绩?正考和补考)
要求:
为每个用户设定用户名,并最终显示每个用户的用户名,考试总分,平均分(要格式化输出,小数保留两位),
总分和平均的统计要求:
某一科只有正考分,则统计正考分
某一科有补考分,则统计补考分

当程序运行时,允许老师撤消本次学生成绩的录入
在程序运行时,可以随时通过选择退出程序,并显示信息
(注意:如果使用数组,在运行时,突然退出,数组可能已经增加容量,此时在显示时,将多出一维)


课后作业:必须使用三维数组完成。
请你使用三维不规则数组实现
N个学生的N门考试成绩的输入(每门考试可能有两种分数—正考或补考)
得到每个学生的总分,平均分
总分和平均的统计要求:
某一科只有正考分,则统计正考分
某一科有补考分,则统计补考分


类的构建。 第三章
面向对象的思想?
类和对象的关系?

如何利用类产生对象呢?
使用类和对象的优势:

范例:
任意三个数字的最大数和最小数?

完成这个操作设计一个类!
特征:三个数字。
行为:比较。


如何来使用类?
1.创建一个新类(class)。
2.使用已经存在的类.p21
1. 存在类是C#内置的类。
2. 自定义的类。

如何使用已经存在的类
1. 在类中直接使用已经存在的类--组合。
范例:
设计思路:
类中所有的变量尽量用private修饰,使用public修饰的方法/属性为变量进行赋数据或获取变量的数据
范例:
显示年薪收入最高的员工的信息。
员工的信息:类(name,salary)
比较员工薪水:类

问题:如果多个员工薪水是相同?
1. 取得最高收入的数字。
2.利用数字反推姓名
3. 返回满足条件的Employee对象
4. 在方法中传递Employee对象


加深:返回收入最低的所有员工。

课堂作业:
请你改编ArrayList类,保证,ArrayList中只能存放String类型的数据。--不能使用泛型


2. 直接由类产生子类,实现员工和经理分类。




课后作业:
1.请你为汽车设计类(家用,商务,军用)。
2程序设计题目:
1.用一个类来实现得到三个数的最大值和最小值。
2.实现一个能得到任何两个数字之间的随机数的程序。






Date类
GregorianCalendar类

大家完成下面的程序设计程序设计
请你制作一个类,
1:这个类包含对当前日期的所有信息的获得—年,月,日,小时,分钟,秒,毫秒,星期数字(和上面程序一样)
2: 要求用户可以选择是否对月,天,分钟,秒的数字进行格式化(必须保留两位),还是不格式化输出

范例:获取当前月,当前年的最大天数。

其他实用的Calendar类常量p32


程序设计
设计一个类来实现两个日期时间的年份,月份,天数之差P35

改变日期时间的内容P37



当我们想看今天是否比一个指定的日期大三天?P38


Date和GregorianCalendar类中数据的互导P40




课后思考题:
1.请你仿照进货系统完成进货步骤。

相关文档
最新文档