求属性集的闭包和函数依赖的闭包算法(一)

最近做数据库实验作业,要求写一个程序,程序语言不限,求出属性集的闭包和函数依赖的闭包。
题目要求如下:

1)根据求属性集闭包的算法,用你熟悉的语言编写程序,要求如下:


根据求属性集闭包的算法,用你熟悉的语言编写程序,要求如下:

1. 由用户输入函数依赖,当用户输入End时,表示所有依赖都输入完毕。(即函数依赖是由用户自己定的,程序中不能假定某个具体的依赖)

2. 函数依赖的形式是AB->C, A->BE这样的形式,为了简单起见,我们假定所有的属性都是用英文的大写字母表示,由AZ。(提示,你可以让用户先输入依赖左边的属性,然后再输入依赖右边的属性,用来表示A->B这样的形式)

3. 用户输入完毕所有的依赖后,显示“请输入属性集求闭包”的提示,当用户输入1个或者多个属性时,求出对应的闭包。(如,用户输入A,则显示A+的值, 用户输入AB则求出AB+的值。显示完毕后,再次显示“请输入属性集求闭包”,让用户继续输入属性,直到用户输入END后程序结束。


2)在上面求属性集闭包的算法的基础上,根据求函数依赖闭包的算法,显示用户输入的函数依赖的闭包F+


以下是我用JAVA编写的程序(如果有所错误的话还望指出!)


import java.util.*;

public class Closures {
	
	public void printout(Map map) {
		Set set=map.keySet();//获取Map集合中的key对象集合
		Iterator it=set.iterator();//创建遍历器
		System.out.println("保存的依赖为:");
		while(it.hasNext()){
			String str=(String)it.next();
			String name=(String)map.get(str);//遍历Map集合
			System.out.println(str+"->"+name);
		}
		
	}
	public String add(String name,String result)
	{
		String str=result;
		for(int i=0;i");
			if(s.length==2){
				map.put(s[0].toUpperCase(), s[1].toUpperCase());//将每个函数依赖以值对的形式存入HashMap中
				rely++;
			}
		}
		Clo.printout(map);
		
		
		System.out.println("请输入所要求的闭包!输入end结束输入");
		while(true)
		{
			Scanner in=new Scanner(System.in);
			result=in.nextLine().toUpperCase();
			if(result.toLowerCase().equals("end"))
			{
				break;
			}
			result=Clo.calculate(result,map);
			System.out.println("所要求的闭包为:"+result);
		}
	}
}

示例输入:


请输入依赖!输入end结束输入

a->b

b->c

end

请输入所要求的闭包!输入end结束输入
a

end

然后就输出了a的闭包,还有个求函数依赖的算法暂时还没写,等下次再更新好了。

你可能感兴趣的:(java)