package org.anbo.msbexam;
/**
* 排序。。。
**算法:控制语句+数组:
(1):10以类奇数JC和...
(2):费波那契数列(三种写法//变种)...
(3):递归(内存执行图)
(4):水仙花数
(5):100-200质数和
(6):二分法查某数在数组中的位置
(7):矩阵对角线元素和(五子棋修饰边符,判断输赢)
(8):生成一个在3-7之间的数
(9):500个小孩数三退一,求最后一个的位置
(10):杨辉三角
//----------------------
1:String常用方法(判断输入多少个类型的字符);
2:File类遍历目录(递归)...
递归:就是允许方法内部调用方法自身的一种方法,是设计和描述算法的一种有力的工具。
3:String temp = new String("tom");内存图
**5:正则表达式:
//-------------
第六章:GUI编程(AWT,Swing)
**图书管理系统......
**两人五子棋......
**记事本......
**豆子吃妖精......
**模拟QQ软件......
**Java计算器……
//--------------------
**线程互斥(模似生产,消费者...)
//---------------
*读写文件(byte[]提高速度),对象Object操作……
//---------
集合:
*(1):Distinct Words Detected!(Map,输入String次数计数器);
*(2):hashSet示例(重写equals,hashCode);
* (3): Date[]的比较大小[排序]
------------------------
JDBC;JDBC_ODBC:
----------------------------
*(1):CRUD CREATE READ UPDATE DELETE 插入数据,更新,读取,删除
*(2):表id 序列; 插入一条记录后,取得id值;;
*(3):二个sql一个事务;;insert update 出错回滚
*(4):一个循环 1000 insert . 0.5s
*(5):存储过程...函数,,,查询表,,,取出来,
*(6):图片存数据库;;
-------------
* */
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyJ2seExam{
int year = 0;
int age = 0;
//一千瓶子算法...
public void sum1000(){
int empty = 0;
int drink = 0;
for(int sum = 1000; sum >= 0; --sum){
empty ++;
drink ++;
if(empty == 3){
sum = sum + 1;;
empty = 0;
}
}
System.out.println(empty + " : " + drink);
}
//水仙花数...
public void GetAaffodil(){
for(int i = 100; i < 1000; i++){
int j= 0 ,k = 0,l = 0;
j = i % 10;
k = i / 100;
l = (i % 100)/10;
if(j*j*j + k*k*k + l*l*l == i){
System.out.println(i);
}
}
}
//九九乘法表...
public void MultiplicationTable(){
for(int i = 1; i < 10; i++){
for(int j = 1; j < i+1; j++){
if(i*j < 10){
System.out.print(i*j + " ");
}else{
System.out.print(i*j + " ");
}
}
System.out.println();
}
}
//打印星阵...
public void GetStar(int row){
for(int i = 0; i < row; i++){
for(int j = 0; j < row - i; j++){
System.out.print(" ");
}
for(int k = 0; k < 2*i+1; k++){
System.out.print("*");
}
System.out.println();
}
}
//一百以内的质数(素数)...
public void GetPrimeNumber(){
for(int i = 1; i < 100; i+=2){
boolean isprime = true;
for(int j = 2; j < i; j++){
if(i%j == 0){
isprime = false;
break;
}
}
if(!isprime){
continue;
}else{
System.out.println(i);
}
}
}
//计算数字m和n的最小公倍数。(还有最大公约数)...
public void GetNumber(int m, int n){
int total = m*n;
int r = 0;
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
if(m%i == 0 && n%j == 0){
r = i;
}
}
}
System.out.println("最大公约数: " + r + "最小公倍数: " + total/r);
}
//1到m的jc和
public void Sumjc(int m){
int sum = 0;
int jc = 1;
for(int i = 1; i <= m; i++){
jc = jc * i;
sum += jc;
}
System.out.println(m+"的jc是:" + jc + ": jc和是: "+sum);
}
// 如果苹果 1元/个, 桔子 2 元/个, 芒果 4元/个,若是用10元去买, 有几种组合呢?
public void GetN(){
int sum = 10;
for(int i = 0; i < sum/1; i++){
for(int j = 0; j < sum/2; j++){
for(int k = 0; k < sum/2; k++){
if(i*1+j*2+k*4 == 10){
System.out.println(i+": "+j+": "+k);
}
}
}
}
}
//费波那契数列...
//----------------------------
public int Fab1(int m){
if(m == 1 || m == 2){
return 1;
}else{
return Fab1(m - 1) + Fab1(m - 2);
}
}
public long Fab2(int m){
long f1 = 1L;
long f2 = 1L;
long f = 0;
if(m == 1 || m == 2){
return 1;
}else{
for(int i = 0; i < m - 2; i++){
f = f1 + f2;
f2 = f1;
f1 = f;
}
}
return f;
}
public int[] ShowFab(int m){
int[] list = new int[m];
list[0] = 1;
list[1] = 1;
for(int i = 2; i< list.length; i++){
list[i] = list[i-1]+list[i-2];
}
return list;
}
/*一个农场有头母牛,现在母牛才一岁,要到3岁才能生小牛,3岁之后
每年生一头小牛。假设每次生的都是母牛,并且也遵守3年才生育并生母牛的原则,
并且无死亡,请问n年后共有多少头牛?
*/
static int count = 1;
private static void feedCow(int year,int age){
year++;
age++;
if(year<=10){
if(age>=3){
count++;
feedCow(year,0);
}
feedCow(year,age);
}
}
/*
* 第二种思路...
* Java codepublic class Cow {
public static int count = 0;
public Cow(int year){
count++;
for(int i=3+year;i<=10;i++){
new Cow(i);
}
}
public static void main(String[] args) {
new Cow(0);
System.out.println(count);
}
}
*/
/*题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),
几个数相加有键盘控制。 程序分析:关键是计算出每一项的值。
* */
public int GetSum(int m){
int sum = 0;
int sum1 = 0;
int sum2 = 1;
for(int i = 0; i < m; i++){
sum1 += m * sum2;
sum2 *= 10;
sum += sum1;
}
return sum;
}
/*题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;
* 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
* */
public void GetBang(){
double SUMM = 100;
double xm = 0;
double sum = 0;
for(int i = 0; i < 10; i++){
xm = SUMM/2;
sum += SUMM + xm;
SUMM = xm;
}
System.out.println(sum + " : " + SUMM);
}
/*题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
* */
public void SetNumber(int x,int y,int z){
if(x > y){
y = x;
}else if(y > z){
z = y;
}
System.out.println("最大数为: " + z);
}
//题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
public void NewFab(){
double newFab;
//初始化数组...
int[] lists = new int[25];
lists[0] = 1;
lists[1] = 1;
for(int i = 2; i < lists.length; i++){
lists[i] = lists[i-1] + lists[i-2];
}
for(int i = 2; i < 20+2; i++){
newFab = (double)lists[i]/lists[i-1];
System.out.println(lists[i] + "/" + lists[i-1]+ " : "+newFab);
}
}
//题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
public void GetCount(int m){
//m = 87654
int m1 = m%10;
int m2 = (m/10)%10;
int m3 = (m/100)%10;
int m4 = (m/1000)%10;
int m5 = m/10000;
if(m5 != 0){
System.out.println("该数是五位数");
System.out.println(m1 * 10000 + m2*1000 + m3*100 + m4*10 + m5);
}else if(m4 != 0){
System.out.println("该数是四位数");
System.out.println(m1 * 1000 + m2 * 100 + m3 * 10 + m4);
}else if(m3 != 0){
System.out.println("该数是个三位数");
System.out.println(m1 * 100 + m2 * 10 + m3);
}else if(m2 != 0){
System.out.println("该数是个二位数");
System.out.println(m1 * 10 + m2);
}else if(m1 != 0){
System.out.println("该数是一位数");
System.out.println(m);
}
}
/*题目:求一个3*3矩阵对角线元素之和
1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 */
public void GetSum_JZ(){
int sum = 0;
int sum1 = 0;
int sum2 = 0;
int[][] lists = new int[3][3];
for(int i = 0; i < lists.length; i++){
for(int j = 0; j < lists.length; j++){
lists[i][j] = (int)(Math.random() * 100);
System.out.print(lists[i][j] + " ");
}
System.out.println();
}
for(int i = 0; i < lists.length; i++){
sum += lists[i][i] + lists[i][lists.length-1 - i];
}
if(lists.length%2 != 0){
sum = sum - lists[lists.length/2][lists.length/2];
}
System.out.println(sum);
}
//杨辉三角 ?????
private int tri[][];
public static final int defaultLine = 10;
//添加元素...
public void yanghuiTri(){
int i , j;
for(i = 0; i < tri.length; ++i){
tri[i][0] = tri[i][i] = 1;
}
for(i = 2; i < tri.length; ++i){
for(j = 1;j < i;++j){
tri[i][j] = tri[i - 1][j - 1] + tri[i - 1][j];
}
}
}
//初始化,程序入口
public void defaultTri(int line){
tri = new int[line][];
for(int i = 0; i < line; i++){
tri[i] = new int[i+1];
}
yanghuiTri();
showTri();
}
//显示扬辉三角...
public void showTri(){
for(int i = 0; i < tri.length; i++){
for(int j = 0; j <= i; j++){
System.out.print(tri[i][j] + " ");
}
System.out.println();
}
}
// 500个小孩手拉手连成一个圈,数1,2,3数到三退一,问最后一个index
public static void getTrue(){
boolean[] arr = new boolean[500];
for(int i = 0; i < arr.length; i++){
arr[i] = true;
}
int index = 0;
int sum = arr.length;
int countSum = 0;
while(sum > 1){
if(arr[index] == true){
countSum++;
}
if(countSum == 3){
countSum = 0;
arr[index] = false;
sum--;
}
index++;
if(index == arr.length){
index = 0;
}
}
for(int i = 0; i < arr.length; i++){
if(arr[i] == true){
System.out.println(i);
//这是问的是第几个人,正如他们所说,最后的结果应该+1吧;
}
}
}
//二分查找法
public static int binarySearch(int[] a,int i){
if(a.length == 0) return -1;
int startPos = 0;
int endPos = a.length -1;
int m = (startPos + endPos) /2;
while(startPos <= endPos){
if(i == a[m]) return m;
if(i > a[m]){
startPos = m + 1;
}
if(i < a[m]){
endPos = m - 1;
}
m = (startPos + endPos) / 2;
}
return -1;
}
//系统自带....
public void FindIndex(int[] list){
Arrays.sort(list);
int i = Arrays.binarySearch(list, 4); //返回4在list中第一次出现的Index;
System.out.println(i);
}
//数组排序:
public int[] order(int[] temp ,int type){
//type == 1表示冒泡..
//type == 2表示插入排序
if(type == 1){
long time1 = System.currentTimeMillis();
for(int i = 0; i < temp.length; i++){
for(int j = 0; j < temp.length - 1; j++){
if(temp[j] > temp[j + 1]){
int t = temp[j];
temp[j] = temp[j + 1];
temp[j + 1] = t;
}
}
}
long time2 = System.currentTimeMillis();
long userTime = time2 - time1;
System.out.println("此次排序所用时间为:" + userTime);
}else{
for(int i = 0; i < temp.length; i++){
for(int j = 0; j < temp.length - 1; j++){
if(temp[i] > temp[j]){
int t = temp[i];
temp[i] = temp[j];
temp[j] = t;
}
}
}
}
return temp;
}
//String常用方法
//1:(判断输入多少个类型的字符);
public static void getNum(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = null;
try {
temp = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
String b1 = "abcdefghijklmnopqrstuvwxyz";
String b2= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int b1count = 0;
int b2count = 0;
for(int i = 0; i < temp.length(); i++){
char c = temp.charAt(i);
if(b1.indexOf(c) != -1){
b1count++;
}
if(b2.indexOf(c) != -1){
b2count++;
}
}
System.out.println("输入小写字母:" + b1count + "输入大写字母:" + b2count);
}
// 2:拆分一个String 装入double[][]中 :
public static void getArray(){
double[][] d;
String s = "1,3;5,6,8;4,9";
String[] ss = s.split(";");
d = new double[ss.length][];
for(int i = 0; i < ss.length; i++){
String[] sSecond = ss[i].split(",");
d[i] = new double[sSecond.length];
for(int j = 0; j < sSecond.length; j++){
d[i][j] = Double.parseDouble(sSecond[j]);
}
}
for(int i = 0; i < d.length; i++){
for(int j = 0; j < d[i].length; j++){
System.out.print(d[i][j] + " ");
}
System.out.println();
}
}
// File类遍历目录(递归)...
// 递归:就是允许方法内部调用方法自身的一种方法,是设计和描述算法的一种有力的工具。
public static void tree(File f,int level){
String preStr = " ";
for(int i = 0; i < level; i++){
preStr += " ";
}
File[] childs = f.listFiles();
for(int i = 0; i < childs.length; i++){
System.out.println(level+preStr+childs[i].getName());
if(childs[i].isDirectory()){
tree(childs[i],level + 1);
}
}
}
//**5:正则表达式:
public static void getReg(){
//System.out.println("abc".matches("..."));
//匹配...三个字母
Pattern p = Pattern.compile("\\w+");
String temp = "abc,db,34bn,66c,678,gkd";
Matcher m = p.matcher(temp);
while(m.find()){
System.out.println(m.group());
}
}
//枚举类型...
public enum MyColor{red,green,blue};
public static void myColor(){
MyColor m = MyColor.green;
switch(m){
case red :
System.out.println(m.ordinal()); //返回序数int
break;
case green :
System.out.println(m.ordinal());
break;
case blue :
System.out.println(m.ordinal());
break;
}
}
//Distinct Words Detected!(Map,输入String次数计数器);
public void distinctMap(){
Map m = new HashMap();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp;
try {
temp = br.readLine();
String[] temps = temp.split(",");
for(int i = 0; i < temps.length; i++){
Integer freq = (Integer)m.get(temps[i]);
if(freq == null){
m.put(temps[i], 1);
}else{
m.put(temps[i], freq + 1);
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(m.size() + " ");
System.out.println(m);
}
//遍历集合...
public void lookColl(){
Collection coll = new HashSet();
coll.add(new Cat(1,"tom"));
coll.add(new Cat(2,"jarry"));
coll.add(new Cat(3,"jack"));
coll.add(new Cat(1,"tom"));
//System.out.println(coll + " ");
Iterator itor = coll.iterator();
while(itor.hasNext()){
System.out.println(itor.next());
}
System.out.println("----------------");
}
//用Collections.sort排序....
//类,要实现Comparable / compareTo方法!
public void orderColl(){
Collection coll2 = new LinkedList();
coll2.add(new Cat(2,"tom"));
coll2.add(new Cat(1,"jarry"));
coll2.add(new Cat(3,"jack"));
coll2.add(new Cat(2,"tom"));
System.out.println(coll2 + " ");
System.out.println("----------");
Collections.sort((LinkedList)coll2);
System.out.println("排序完成结果为:");
System.out.println(coll2 + " ");
}
//--------------
public static void main(String[] args){
/*测试排序...
int[] temp = {5,7,1,3,9,4};
new MyJ2seExam().order(temp,2);
for(int i : temp){
System.out.println(i);
}
*/
new MyJ2seExam().getReg();
}
}
//在用Collections.sort排序的时候
//一定要实现接口Comparbale的
//集合测试类:Cat
class Cat implements Comparable{
private int i;
private String name;
public Cat(int i,String name){
this.i = i;
this.name = name;
}
public String getName(){
return this.name;
}
public String toString(){
return this.name;
}
//lookColl为了不添加重复项,得重写equals,hashCode方法!
public boolean equals(Object o){
if(!(o instanceof Cat)) return false;
Cat c = (Cat)o;
if(this.i == c.i && this.name == c.name){
return true;
}else{
return false;
}
}
public int hashCode(){
return i;
}
public int compareTo(Object o) {
if(!(o instanceof Cat)) return 0;
Cat c = (Cat)o;
if(this.i > c.i){
return 1;
}else if(this.i < c.i){
return - 1;
}else{
return 0;
}
}
}
/**
//-----------i++;++i区别----------
public void printijk(){
int i = 3;
int j = i++;
//System.out.println("i"); 此处值应该是:4
int k = ++i;
System.out.println(i+" : "+j+" : "+k); //5,3,5
}
//-----------判断输入月份----------------
public void Month(int m){
switch((m -1)%3 ){
case 0: System.out.println("春天"); break;
case 1: System.out.println("夏天"); break;
case 2: System.out.println("秋天"); break;
case 3: System.out.println("冬天"); break;
default : System.out.println("输入错误"); break;
}
}
//--------输出菱形--------
public void PrintStart(int row){
for(int i = 0; i < row; i++){
for(int j = 0; j < row - i; j++){
System.out.print(" ");
}
for(int k = 0; k < 2*row-1; k++){ //k < 2*i-1 可以输出三角
System.out.print("*");
}
System.out.println();
}
}
//----------参数传递-------------
public void SetParameter(){
StringBuffer s1 = new StringBuffer("yes");
StringBuffer s2 = new StringBuffer("no");
GetParameter(s1,s2); //可以直接调用同类型普通方法...
System.out.println(s1 + " : " + s2); // yes是的意思 :no
}
public void GetParameter(StringBuffer b1,StringBuffer b2){//这里会拷贝引用s1和s2,拷贝成b1和b2
b1.append("是的意思");//改变了b1,也影响到了引用s1,
b2 = b1; //把引用b1指向了引用b2,b1,b2,s1指向同一个对象...
}
//------------String,StringBuffer,StringBuilder-----------------
public void StringExam(){
String s1 = "Do The Best Yourself!";
String s2 = "do the best yourself!";
char c1 = s1.charAt(5); //返回Index位置的char
int values = s1.compareTo(s2); //比较大小,分大小写
String s3 = s1.concat(s2); //把s1两字符串s2连接起来.原字符串不变
int a = 10; System.out.println(s1 + a + 6); //s11020
// == equals 区别
String s4 = new String("do the best yourself!");
boolean b1 = (s4 == s2); //b1为false;
boolean b2 = (s4.equals(s2)); //b2为true;
byte[] Sbyte = s1.getBytes(); //将s1转变为byte数组..
int i = s1.indexOf('Y'); //返回字符'Y',所在Index
String s5 = s1.replace('B', 'f'); //替换字符生成新串..
boolean b3 = s1.startsWith("D"); //是否以字符D开头...
String s6 = s1.substring(3,6); //截取字符串
char[] sbyte = s1.toCharArray(); //把字符串转换成char数组
String s7 = s1.toLowerCase(); //把字符大写的全转换成小写
StringBuffer sb = new StringBuffer("user is amdin");
sb.append("good day"); //追加字符
sb.deleteCharAt(5); //删除index位置上的字符...
sb.insert(5, false);
sb.setCharAt(3, 'Y'); //修改index 3 位置上的值
}
/*---------------System----------------------
gc方法
currentTimeMillis
arraycopy
exit方法
getProperty
public static void main(String[] args) {
TextWork t2 = new TextWork();
t2.SetParameter();
TestStatic t1 = new TestExtends();
//多态 基类变量,子类实例,
//t1能调基类的非private属性方法,和子类中重写了的方法,不能调用只类新写方法...
}
}
//--------一些关键字--------------
//final声明类,表示类不能被继承...
final class Text{
//final声明变量为常量,不可更改...
private final int SIZE = 15;
//final声明方法,表示不能被重写...
public final int run(){
return 0;
}
}
class TestStatic{
//静态块的理解...
static int s_a=1;
static
{
s_a=11;
s_b=22;
}
static int s_b=2;
//System.out.println(t1.s_a); // 11;
//System.out.println(t1.s_b); // 2;
private static int SIZE; //对SIZE实行封装
public TestStatic(){
System.out.println("如果没声明系统会默认构造方法..");
}
//构成方法重载,在同一个class里,方法名相同,参数个数或类型不同...
public TestStatic(int i){
this(); //this调用无参构方法
} //私有的属性不能直接调用,但能实现它的调用.
public void SetSize(int size){
this.SIZE = size;
}
public int GetSize(){
return SIZE;
}
}
class TestExtends extends TestStatic{
private int i = 10;
public TestExtends(){
super(); //调用基类的构造方法...
}
public int GetSize(){ //重写基类的GetSize方法...
return i;
}
public void init(){
System.out.println("这是子类的新方法");
}
}
abstract class Animal{
public abstract void run();
public void init(){
System.out.println();
}
}
interface People{
static final int TABLE_SIZE = 10;
void ok(); //默认静态,final
}
interface People1{
static final int TABLE_SIZE = 10;
void yes(); //默认静态,final
}
class Tom extends Animal implements People,People1{
public void run(){
System.out.println("抽像类抽像方法必须被重写");
}
public void yes(){
System.out.println("要实现接口中的所有方法");
}
public void ok(){
}
}
//------------日期处理--------------
class MyDate {
Date mydate;
public void run(){
//用Date输出当前日期:
mydate = new Date();
int year = mydate.getYear() + 1900;
int month = mydate.getMonth() + 1;
int date = mydate.getDate();
int hour = mydate.getHours();
int minute = mydate.getMinutes();
int second = mydate.getSeconds();
System.out.println("当前日期为:"+year+"年"+month+"月"
+date+"日"+" :"+hour+":"+minute+":"+second);
//用Calendar输出当前时间:
Calendar dat = Calendar.getInstance();
int cyear = dat.get(Calendar.YEAR);
int cmonth = dat.get(Calendar.MONTH) + 1;
int cdate = dat.get(Calendar.DATE);
int chour = dat.get(Calendar.HOUR_OF_DAY);
int cminute = dat.get(Calendar.MINUTE);
int csecond = dat.get(Calendar.SECOND);
System.out.println("当前日期为:"+cyear+"年"+cmonth+"月"
+cdate+"日"+" :"+chour+":"+cminute+":"+csecond);
//SimpleDateFormat 日期转换....
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss");
String jack = sdf.format(new Date());
System.out.println(jack);
try{
Date tom = sdf.parse(jack);
System.out.println(tom);
}catch(Exception e){
e.printStackTrace();
}
}
}
*/
/**
*
*/
package org.anbo.msbexam;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* @author lyh
* @authorMar 8, 2010
*/
public class ExamIO {
FileInputStream fis = null;
FileOutputStream fos = null;
int count = 0;
public void copyFile(){
try {
fis = new FileInputStream("d:/史啸吟-断桥.wma");
fos = new FileOutputStream("d:/index.wma");
byte[] buff = new byte[512];
try{
int temp = fis.read(buff);
while(temp != -1){
fos.write(buff);
temp = fis.read(buff);
}
}catch(IOException e){
e.printStackTrace();
}
/*一个字节一个字节的读取
try {
int temp = fis.read();
while(temp != -1){
fos.write(temp);
count++;
temp = fis.read();
}
} catch (IOException e) {
e.printStackTrace();
}
*/
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("文件Copy成功");
}
//copy Object
public void saveObject(){
Tiger tiger = new Tiger(1,"tom");
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("d:/index.dat");
oos = new ObjectOutputStream(fos);
oos.writeObject(tiger);
oos.flush();
oos.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("saveSuccess!");
}
public void readObject(){
ObjectInputStream ois = null;
try {
fis = new FileInputStream("d:/index.dat");
ois = new ObjectInputStream(fis);
Tiger t = (Tiger)ois.readObject();
System.out.println("读取到的对像名字:" + t.getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//--------------
public static void main(String[] args){
new ExamIO().readObject();
}
}
//保存Object一定要序列化
class Tiger implements java.io.Serializable{
private static final long serialVersionUID = 1L;
private int i;
private String name;
public Tiger(int i,String name){
this.i = i;
this.name = name;
}
public String getName(){
return this.name;
}
}
public class ArrayExam {
public static void main(String[] args){
SyncStack ss = new SyncStack();
Producer p = new Producer(ss);
Consumer c = new Consumer(ss);
new Thread(p).start();
new Thread(c).start();
}
}
class WoTou{
int id;
public WoTou(int id){
this.id = id;
}
public String toString(){
return "WoTou:" + id;
}
}
class SyncStack{
int index = 0;
WoTou[] arrWT = new WoTou[6];
public synchronized void push(WoTou wt){
if(index == arrWT.length){
try{
this.wait();
}catch(Exception e){
e.printStackTrace();
}
this.notify();
}
arrWT[index] = wt;
index++;
}
public synchronized WoTou pop(){
if(index == 0){
try{
this.wait();
}catch(Exception e){
e.printStackTrace();
}
this.notify();
}
index--;
return arrWT[index];
}
}
class Producer implements Runnable{
SyncStack ss;
public Producer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i = 0; i < 20; i++){
WoTou wt = new WoTou(i);
ss.push(wt);
System.out.println("生产了:" + wt);
try{
Thread.sleep((int)(Math.random() * 1000));
}catch(Exception e){
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
SyncStack ss;
public Consumer(SyncStack ss){
this.ss = ss;
}
public void run(){
for(int i = 0; i < 20; i++){
WoTou wt = ss.pop();
System.out.println("销费了:" + wt);
try{
Thread.sleep((int)(Math.random() * 1000));
}catch(Exception e){
e.printStackTrace();
}
}
}
}