实验六

3、 输入一个文件系统的子目录,编程序将其中的所有内容的名字输出到console上,要求:
a、使用泛型的动态数组作为工具;
b、使用课本193页的File对象及其方法;
c、将此子目录下的所有子目录(可能有很多层)及其中的所有文件的文件名输出;
d、输出目录名和文件名时,用前缀空格显示出层次关系;

import java.io.*;
import java.util.ArrayList;

public class OpenFile
{
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		File myFile=new File("D:\\Study\\Java\\Test6Q6");//需要打开的目录
		ArrayList<File> files=new ArrayList<File>();//用于顺序存放目录下的内容
		int blank=0;//用于前缀输出
		ArrayList<Integer> blanks=new ArrayList<Integer>();//与files链表相对应,每一个文件对应一个前缀
		if(!myFile.exists())
		{
			System.out.println("输入的目录不存在!");
			return;
		}
		files.add(myFile);
		blanks.add(blank);
		
		for(int i=0;i<files.size();i++)//遍历files链表中的每一个结点
		{
			if(files.get(i).isDirectory())//判断结点是否为文件夹
			{
				blank=blanks.get(i)+2;//该文件夹下的所有内容,前缀都会多两个空格,以便区分从属关系
				File[] childFiles=files.get(i).listFiles();//将该文件夹下的所有内容放进childFiles数组里
				for(int j=0;j<childFiles.length;j++)
				{
					files.add(i+j+1,childFiles[j]);//注意,把childFiles数组里的元素按序接在了父文件的后边,保证files链表的有序性
					blanks.add(i+j+1,blank);
				}
			}
		}
		
		for(int i=0;i<files.size();i++)
		{
			for(int j=0;j<blanks.get(i);j++)
			{
				System.out.print(" ");
			}
			System.out.print("-"+files.get(i).getName());
			System.out.println();
		}
	}
}

5、 选择泛型集合类中的链表类,用此类:a、随机产生100个整数(范围自定)的链表,在生成的过程中从小到大排列,然后输出;b、随机产生100个6个英文字母的单词的链表,在生成的过程中从小到大排列,然后用链表方式输出。

import java.util.LinkedList;//引入 LinkedList类

public class Sort 
{
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		LinkedList<Integer> myIntLink= new LinkedList<Integer>();
		int firstIntLinkNode=(int)(Math.random()*(100));
		myIntLink.addLast(firstIntLinkNode);//使用 addLast()在尾部添加元素
		
		for(int i=0;i<100;i++)
		{
			int random=(int)(Math.random()*(100));
			int j=0;
			while(j<i+1)
			{
				if(random<myIntLink.get(j))//使用get()返回指定位置的元素
				{
					break;//此时j即为插入位置
				}
				j++;
			}
			myIntLink.add(j,random);//使用add()向指定位置插入元素
		}
		
		for(int i=0;i<100;i++)
		{
			System.out.print(String.format("%1$ 3d",myIntLink.get(i))+" ");
			if((i+1)%10==0)
			{
				System.out.println();
			}
		}
		
		LinkedList<StringBuffer> myStringLink= new LinkedList<StringBuffer>();
		StringBuffer firstStringLinkNode=new StringBuffer();
		for(int i=0;i<6;i++)
		{
			int num=(int)(Math.random()*26);
			firstStringLinkNode.append((char)('a'+num));
		}
		myStringLink.addLast(firstStringLinkNode);
		
		for(int i=0;i<100;i++)
		{
			StringBuffer random=new StringBuffer();
			for(int j=0;j<6;j++)
			{
				int num=(int)(Math.random()*26);
				random.append((char)('a'+num));
			}
			int j=0;
			while(j<i+1)
			{
				if(random.toString().compareTo(myStringLink.get(j).toString())<0)//使用get()返回指定位置的元素
				{
					break;//此时j即为插入位置
				}
				j++;
			}
			myStringLink.add(j,random);//使用add()向指定位置插入元素
		}
		
		for(int i=0;i<100;i++)
		{
			System.out.print(myStringLink.get(i)+" ");
			if((i+1)%10==0)
			{
				System.out.println();
			}
		}
	}
}

4、 设计一个小英汉词典,其中英文单词的个数为30(单词可自己任选),编程序,从键盘输入单词,程序将单词的中文解释输出,若没有找到,则输出:not found in our dictionary!

import java.util.*;
import java.util.Scanner;

public class Dictionary
{
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		HashMap<String, String> dict=new HashMap<String,String>();
		dict.put("abandon","遗弃");
		dict.put("alter","改变");
		dict.put("consume","消耗");
		dict.put("split","分裂");
		dict.put("transform","转变");
		dict.put("vain","徒劳");
		dict.put("stimulate","激励");
		dict.put("wander","漫游");
		dict.put("abuse","滥用");
		dict.put("ruin","毁灭");
		dict.put("route","路线");
		dict.put("delay","推迟");
		dict.put("tend","趋向");
		dict.put("ultimate","最终");
		dict.put("excess","过量");
		dict.put("grant","授予");
		dict.put("invade","入侵");
		dict.put("calculate","计算");
		dict.put("interfere","介入");
		dict.put("hook","钩子");
		dict.put("ban","禁止");
		dict.put("capture","俘虏");
		dict.put("exploit","剥削");
		dict.put("poverty","贫穷");
		dict.put("debt","欠债");
		dict.put("scandal","丑闻");
		dict.put("focus","聚焦");
		dict.put("scan","扫描");
		dict.put("decade","十年");
		dict.put("valley","山谷");
		System.out.println("词典含以下30个单词:");
		for(String s:dict.keySet())
		{
			System.out.print(s+" ");
		}
		System.out.println();
		
		Scanner scan=new Scanner(System.in);
		boolean flag=true;
		while(flag)
		{
			menu();
			int choice=scan.nextInt();
			switch(choice)
			{
			case 1:
				System.out.println("请输入您要查询的英文单词:");
				String queryWord=scan.next();
				if(dict.get(queryWord)!=null)
				{
					System.out.println(queryWord+":"+dict.get(queryWord));
				}
				else
				{
					System.out.println("该单词不存在词典中");
				}
				break;
			case 2:
				flag=false;
				System.out.println("已退出词典");
				break;
			default:
				break;
			}
		}
	}
	
	public static void menu()
	{
		System.out.println("请选择以下操作:");
		System.out.println("1.查询单词");
		System.out.println("2.退出词典");
	}
}
  1. 接口/抽象类 通过本次实验,我对抽象类的运用有了更深入的了解。在法1中,父类Animal中的两个方法并没有实际的使用起来,而只是为了重载而不得不写上方法体,而学会了抽象类就能很好地解决这个问题。在Animal类中不需要给出这两个方法的具体实现,而是在它的四个子类中提供自己的实现,使得设计更加清晰,效率更高。
    通过本次实验,我对接口的运用有了更深入的了解。既然Bird,Insect,Reptile,Fish都必须实现showType与showTalent两个方法,那就可以直接在接口中写上这两个方法,然后在四个类中去实现该接口,注意接口中只进行方法的声明,而不提供方法的实现。
  2. 比较器 经过本次实验,我对两种类型的比较器有了更深的认识。Comparable(内部排序) int compareTo(Object obj),返回值为int,默认升序排序;Comparator(外部排序) int
    compare(Object ob1,Object
    obj2),返回值为int,排序灵活。若一个类实现了Comparable(排序接口)接口,就意味着该类支持排序存放该类的Collection或数组,可以直接通过Collection.sort()或着Arrays.sort进行排序;Comparator接口是比较器接口,类本身不支持排序,专门由若干个第三方的比较器(实现了Comparator接口的类)来进行类的排序,是一个外部比较器,但是此方法排序的方式更加灵活多变,可以自己设定。重要的是,Comparable在要比较的对象的类中实现,可以比较该对象和另一个对象,而Comparator在一个单独的类中实现,可以比较任意两个对象。
  3. 目录输出 通过本次实验,我对File类中的成员方法有了进一步认识,比如本题中用到的isDirectory(),就是检查一个对象是否是文件夹/目录;listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法,能够获取当前文件夹下的所有文件和文件夹,即如果文件夹A下还有文件D,那么D也会被返回。
  4. 英汉词典 在本次实验中,我体会到了HashMap类的方便。有了键-值,让本题中英汉对应的操作变得十分简单;同时,HashMap的成员方法,比如本题中用到的put(),get()都十分实用,特别是get()方法,用于获取指定
    key 对应对的value,让查找与输出的代码与思路都变得十分简洁。
  5. LinkedList类 经过本次实验,我深刻体会到了java中集合类的方便实用。在上一次实验中,面对一样的问题,我使用了两个指针,去实现链表的查找以及插入,而在这次的实验中,我在查看LinkedList类的成员方法时,惊喜地发现了public
    void add(int index, E element)——向指定位置插入元素,以及public E get(int
    index)——返回指定位置的元素,从而大大简化了代码的书写,也让我想去了解更多的集合类,以及它们的成员方法。
  6. 文件输入输出 在本次实验中,一是对java中IO知识有了更深的理解,明白输入输出流的含义,本来不太清楚的节点流与过滤流,在完成实验的过程中也有了进一步的认识,同时学会了文件的读写;二是加深对异常处理的try,catch,final操作的理解。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值