`
atomcow
  • 浏览: 8036 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

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。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics