vector、学生管理系统、汉字转拼音 第四讲091121C

集合框架
1Collection(集合) 2Map
1.1List 1.2Set 2.1HashMap 2.2HashTable
1.1.1Vector 1.2.1 HashSet
1.1.2ArrayList 1.2.2TreeSet
1.1.3LinkedList
----------------------------------------------------------------------
1)vector.add(data)通过这种方法为vector添加元素。
2)vector.size()返回vector的元素个数(长度)。
3)vector.get(i)通过这种方法获得vertor中的元素。
4)忽略大小写比较字符串。
TestVector.java
对vector基础操作的一个练习。

import java.util.*;
public class TestVector {
public static void main(String[] args) {

Vector v=new Vector();
System.out.println("输入");
Scanner s = new Scanner(System.in);
String data = s.next();

while(!data.equalsIgnoreCase("over")){
v.add(data); //(1)
System.out.println("输入");
Scanner s1 = new Scanner(System.in);
data = s1.next();
}

System.out.println(v);
for(int i=0;i<v.size();i++){//(2)
System.out.println(v.get(i)); //(3)
}

}
}

输出:
输入 360 输入 hello 输入 3.14159 输入 over
[360, hello, 3.14159]
360
hello
3.14159
----------------------------------------------------------------------
1)本例区别了addAll和add的区别,前者类似于数组的拷贝,而后者仅仅把vector的参数当做一个元素存入。
2) indexOf返回元素在vector中的编号。此编号跟存入vector的先后有关,前面的元素消失,后面的元素序号向前进一位。
3) isEmpty()是否为空返回布尔,contains(a)是否包含a元素返回布尔。
TestVector2.java
对vector基础操作的又一个练习。

import java.util.*;
public class TestVector2 {
public static void main(String[] args) {

Vector v=new Vector();
Vector v2=new Vector();
Vector v3=new Vector();

v.add("hello");//(1)
v.add("world");//(1)

v2.addAll(v);
v3.add(v);

System.out.println(v2.indexOf("hello"));//(2)
System.out.println(v2.contains("world"));//(3)
System.out.println(v2.isEmpty());//(3)
System.out.println(v2);
System.out.println(v3.size());
System.out.println(v3);
}
}

输出:0
true
false
[hello, world]
1
[[hello, world]]
----------------------------------------------------------------------
1)前半段是关于装箱拆箱的例子,int a是以前的实现方法,而b是用了装箱拆箱后的实现。
2)泛型,就是用尖括号定义了这个vector内的元素类型必须统一。
3)for in 循环
Test.java
装箱拆箱,泛型的说明

import java.util.Vector;

public class Test {
public static void main(String[] args) {

Vector v =new Vector();
v.add(new Integer(12));
int a=((Integer) v.get(0)).intValue();
v.add(122); //(1)
int b=(Integer)v.get(1); //(1)
System.out.println(v+" "+a+" "+b);


Vector<String> v2 =new Vector<String>();//(2)
v2.add("arg0");
v2.add("arg02");
v2.add("arg022");
for(String s : v2){ //(3)
System.out.println(s);
}
}
}

输出:[12, 122] 12 122
arg0
arg02
arg022
----------------------------------------------------------------------
hashSet中的元素在内存中存储的位置是通过哈希算法来确定的,故方便快速定位查询。
1) 本例走了一个极端让添加的元素都有相同的哈希码,而且比较它们永远返回真,说明比较的Dog是相同的。故HashSet中只有一个元素。
2)add自定义对象时候注意写法
TestHash.java
对哈希码的一个小测验。

import java.util.*;
public class TestHash {
public static void main(String[] args) {
HashSet<Dog> s= new HashSet<Dog>();
s.add(new Dog("tom",10)); //(2)
s.add(new Dog("jim",12));
s.add(new Dog("kite",40));

System.out.println(s.size());
for(Dog a:s){
System.out.println(a);
}
}
}

Dog.java
public class Dog {
String name;
int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object arg0) {//(1)
return true;
}
public int hashCode() {//(1)
return 1;
}
public String toString() {
return (this.name+"|"+this.age);
}
}

输出:
1
tom|10
----------------------------------------------------------------------
1)在main函数外面定义了全局都要经常用到的Vector和键盘输入。
2)student的equel方法 在定义modStu()函数indexOf(new Student(x))语句中用到。
StudentManage.java
学生管理系统(不健壮,仅仅实现基本功能,学习用),键盘输入,对学生信息进行增删改。老师提供的健壮版这里不写了。

import java.util.*;
public class StudentManage {

static Vector<Student> v =new Vector<Student>();//(1)
private static Scanner scan = new Scanner(System.in); //(1)

public static void main(String[] args) {
while(true){
System.out.println();
System.out.println("1加;2删;3改;4打印;5退出");
System.out.print("输入选项:");
int sel = scan.nextInt();

switch (sel) {
case 1:
addStu();
break;
case 2:
delStu();
break;
case 3:
modStu();
break;
case 4:
prtStu();
break;
case 5:
System.exit(0);
}
}
}

static void addStu(){
boolean iscon=true;
do{
System.out.print("加学生 姓名:");
String x1 = scan.next();
System.out.print("英文成绩:");
int x2 = scan.nextInt();
System.out.print("JAVA成绩:");
int x3 = scan.nextInt();

Student thestu = new Student(x1,x2,x3);

v.add(thestu);

System.out.print("继续加娃娃不? Y/N : ");
String x4 = scan.next();
if(x4.equalsIgnoreCase("n")){
iscon=false;
}

}while(iscon);
}

static void delStu(){
System.out.print("删学生 姓名:");
String x = scan.next();
v.remove(new Student(x));
}

static void modStu(){
System.out.print("改学生 姓名:");
String x = scan.next();

int index=v.indexOf(new Student(x)); //(2)

Student s=(Student)v.get(index);

System.out.print("改学生 英语:");
int x1 = scan.nextInt();
System.out.print("改学生 JAVA:");
int x2 = scan.nextInt();
s.setEans(x1);
s.setJans(x2);
}

static void prtStu(){
for (int i = 0; i < v.size(); i++) {
Student stu = (Student) v.get(i);
System.out.println("学生" +stu.getName() + "的 英语成绩:" + stu.getEans() + " JAVA成绩:" +stu.getJans());
}
}
}
Student.java


public class Student {
private String name;
private int eans;
private int jans;
Student(String a,int b,int c){
this.name=a ;
this.eans=b;
this.jans=c;
}
Student(String a){
this.name=a;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getEans() {
return eans;
}
public void setEans(int eans) {
this.eans = eans;
}
public int getJans() {
return jans;
}
public void setJans(int jans) {
this.jans = jans;
}
public boolean equals (Object stu){
//-------------indexOf(new Student(x))用这个判断
return this.name.equalsIgnoreCase(((Student)stu).name);
}
}

输出:
1加;2删;3改;4打印;5退出
输入选项:1
加学生 姓名:tom
英文成绩:100
JAVA成绩:96
继续加娃娃不? Y/N : y
加学生 姓名:alex
英文成绩:86
JAVA成绩:99
继续加娃娃不? Y/N : n

1加;2删;3改;4打印;5退出
输入选项:4
学生tom的 英语成绩:100 JAVA成绩:96
学生alex的 英语成绩:86 JAVA成绩:99

1加;2删;3改;4打印;5退出
输入选项:2
删学生 姓名:alex

1加;2删;3改;4打印;5退出
输入选项:4
学生tom的 英语成绩:100 JAVA成绩:96

1加;2删;3改;4打印;5退出
输入选项:5
----------------------------------------------------------------------
1)这个例子使用的是2.1HashMap,和vector不同的是:HashMap存储数组是利用数值对存储。
2)泛型可以定义两个类型的格式
Trans.java
把汉字解释成为拼音的小程序

import java.util.*;

public class Trans {
public static void main(String[] args) {
String s="hello,正北一夜。";
System.out.println(findWay(s));
}
static String findWay(String s){
HashMap<String,String>map=new HashMap<String,String>();//(1、2)

map.put("yin", "因引印银音饮阴隐荫吟尹寅茵淫殷姻烟");
map.put("biao", "表标彪膘杓婊飑飙鳔瘭飚镳裱骠镖");
map.put("bian", "边变便遍编辩扁贬鞭卞辨辫忭砭匾苄");
map.put("yi", "一以已亿衣移依易医乙仪亦椅益倚姨翼译");
//……老多老多了,本处只截取很短很短一点
map.put("fen", "分份芬粉坟奋愤纷忿粪酚焚吩氛汾喷");
map.put("ye", "也夜业野叶爷页液掖腋冶噎耶咽曳椰邪谒邺晔烨揶");
map.put("ya", "呀压牙押芽鸭轧哑亚涯丫雅衙鸦");
map.put("zheng", "正整睁争挣征怔证症郑拯丁蒸狰政峥钲铮筝诤");
map.put("ben", "本奔苯笨夯锛贲畚坌");
map.put("bei", "被北倍杯背悲备碑卑贝辈钡焙狈惫");
map.put("zhang", "张章长帐仗丈掌涨账樟杖");

String p="";

Set <String>keys=map.keySet();//把每个读音的行提出来,添加到keys

for(int i=0;i<s.length();i++){
String c = "" + s.charAt(i);
boolean isFound = false;
for(String key:keys ){

String value = map.get(key);//通过读音桥梁,得到每个读音的所有字
if(value.indexOf(c)>=0){
p=p+" "+key;
isFound=true;
break;
}
}
if(!isFound){
//p=c+p;
p=p+c;
}
}
return p;
}
}

输出:hello, zheng bei yi ye。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值