我需要一个用Java编写的程序:集合的并、交和差运算。不知道你能不能帮我,谢谢!!!

编制一个能演示执行集合的并、交和差运算的程序。
要求: (1)集合的元素限定为小写字母字符[‘a’..’z’]。
(2)演示程序以用户和计算机的对话方式执行。
测试数据: Set1=“magazine”,Set2=“paper”,
(1)Set1∪Set2=“aegimnprz”,Set1∩Set2=“ae”,Set1-Set2=“gimnz”
(2)Set1=“012oper4a6tion89”,Set2=“error data”,
Set1 ∪Set2=“adeinoprt”,Set∩Set2=“aeort”,Set1-Set2=“inp”

import java.util.LinkedHashSet;
import java.util.Set;

public class Muster {
// 定义并集存储对象
private Set<Character> unite = new LinkedHashSet<Character>();
// 定义交集存储对象
private Set<Character> intersection = new LinkedHashSet<Character>();
// 定义a-b差集存储对象
private Set<Character> differenceA2B = new LinkedHashSet<Character>();
// 定义b-a差集存储对象
private Set<Character> differenceB2A = new LinkedHashSet<Character>();

/**
* 计算每个集合
* @param muster1
* @param muster2
*/
public Muster(String muster1, String muster2) {
//把非26个英文字母全替换成空串
muster1 = muster1.replaceAll("[^a-zA-Z]", "");
muster2 = muster2.replaceAll("[^a-zA-Z]", "");
//循环第一个集合
for(Character temp : muster1.toCharArray()) {
//添加并集
unite.add(temp);
if(muster2.indexOf(temp) >= 0) {
//如果集合2中存在当前元素,在交集中追加记录
intersection.add(temp);
} else {
//如果集合2中不存在当前元素,在第一个集合与第二个集合的差集添加记录
differenceA2B.add(temp);
}
}
//循环第二个集合
for(Character temp : muster2.toCharArray()) {
//添加并集
unite.add(temp);
if(muster1.indexOf(temp) >= 0) {
//如果集合1中存在当前元素,在交集中追加记录
intersection.add(temp);
} else {
//如果集合1中不存在当前元素,在第二个集合与第一个集合的差集添加记录
differenceB2A.add(temp);
}
}
}

/**
* 测试
* @param args
*/
public static void main(String[] args) {
//创建实例,并且给出2个结果集
Muster muster = new Muster("magazine", "paper");
//输出并集
System.out.println("unite\t" + muster.getUnite());
//输出交集
System.out.println("intersection\t" + muster.getIntersection());
//第一个集合与第二个集合的差集
System.out.println("differenceA2B\t" + muster.getDifferenceA2B());
//输出第二个集合与第一个集合的差集
System.out.println("differenceB2A\t" + muster.getDifferenceB2A());
System.out.println("--------------------------------------------------------------------------------");
//第二个例子
muster = new Muster("012oper4a6tion89", "error data");
//输出并集
System.out.println("unite\t" + muster.getUnite());
//输出交集
System.out.println("intersection\t" + muster.getIntersection());
//第一个集合与第二个集合的差集
System.out.println("differenceA2B\t" + muster.getDifferenceA2B());
//输出第二个集合与第一个集合的差集
System.out.println("differenceB2A\t" + muster.getDifferenceB2A());
}

public String getUnite() {
return getStringBySet(unite);
}

public String getIntersection() {
return getStringBySet(intersection);
}

public String getDifferenceA2B() {
return getStringBySet(differenceA2B);
}

public String getDifferenceB2A() {
return getStringBySet(differenceB2A);
}

private String getStringBySet(Set<Character> set) {
StringBuffer result = new StringBuffer();
for(Character c : set) {
result.append(c);
}
return result.toString();
}

}

打印结果:
unite magzinepr
intersection ae
differenceA2B mgzin
differenceB2A pr
--------------------------------------------------------------------------------
unite operatind
intersection oerat
differenceA2B pin
differenceB2A d

注:Set集合是去除重复记录的,所以不怕加的多,反正存不进去。LinkedHashSet实例是保证顺序不变,这样执行多少遍结果一样,看着舒服。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-11
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JOptionPane;

public class CharSet {

public static void main(String[] args) {
String set1 = getInputString("请输入第一个集合的元素");
String set2 = getInputString("请输入第二个集合的元素");

CharSet charSet = new CharSet(set1, set2);
StringBuffer message = new StringBuffer("set1 == " + set1 + ", set2 == " + set2).append("\n");

message.append("Set1∪Set2 == ").append(charSet.or()).append("\n");
message.append("Set1∩Set2 == ").append(charSet.and()).append("\n");
message.append("Set1-Set2 == ").append(charSet.subtract()).append("\n");
JOptionPane.showMessageDialog(null, message);
}

private static String getInputString(String msg) {
String input = null;
while(true){
input = JOptionPane.showInputDialog(msg);
if(input == null || input.trim().length() == 0)
JOptionPane.showMessageDialog(null, "忽悠我是吧, 别正个空的集合啊 ~");
else
return input;
}
}

private String set1;
private String set2;

public CharSet(String set1, String set2) {
this.set1 = filter(set1);
this.set2 = filter(set2);
}

private String filter(String string) {
return string.replaceAll("[^a-z]", "");
}

/** 并 */
public String or(){
Set<Character> buf = new TreeSet<Character>();
addAll(buf, set1);
addAll(buf, set2);
return toString(buf);
}

/** 交 */
public String and(){
Set<Character> buf = new TreeSet<Character>();
for(char c:set1.toCharArray()){
if(set2.contains(String.valueOf(c))){
buf.add(Character.valueOf(c));
}
}
return toString(buf);
}

/** 差 */
public String subtract(){
Set<Character> buf = new TreeSet<Character>();
addAll(buf, set1);
for(char c:set2.toCharArray()){
if(buf.contains(Character.valueOf(c))){
buf.remove(Character.valueOf(c));
}
}
return toString(buf);
}

private String toString(Set<Character> buf){
StringBuffer s = new StringBuffer();
for(Character c:buf){
s.append(c);
}
return s.toString();
}

private void addAll(Set<Character> buf, String set) {
for(char c:set.toCharArray()){
buf.add(Character.valueOf(c));
}
}

}
第2个回答  2013-08-11
C语言的行不?

#include <stdio.h>
#include <stdlib.h>

int a[30],b[30],ans[30];
int n,m;

void jiao()
{
int i;
for(i=0;i<26;i++)
if(a[i] && b[i])
ans[i]=1;
else ans[i]=0;
}

void bing()
{
int i;
for(i=0;i<26;i++)
if(a[i] || b[i])
ans[i]=1;
else ans[i]=0;
}

void cha()
{
int i;
for(i=0;i<26;i++)
if(a[i] && !b[i])
ans[i]=1;
else ans[i]=0;
}

void display()
{
int i,t;
t=1;
for(i=0;i<26;i++)
if(ans[i])
{
printf("%c ",i+'a');
t=0;
}
if(t)printf("结果为空集合");
printf("\n");
}
int main()
{
int i;
char ch[10];
printf("请输入第一个集合的元素个数:");
scanf("%d",&n);
printf("请输入第一个集合的元素:");
for(i=0;i<26;i++)
{
a[i]=0;
b[i]=0;
ans[i]=0;
}

for(i=0;i<n;i++)
{
scanf("%s",ch);
a[ch[0]-'a']=1;
}

printf("请输入第二个集合的元素个数:");
scanf("%d",&m);
printf("请输入第二个集合的元素:");
for(i=0;i<m;i++)
{
scanf("%s",ch);
b[ch[0]-'a']=1;
}
printf("请输入要做的操作:\n");
printf("1.交\n");
printf("2.并\n");
printf("3.差\n");
scanf("%d",&i);

if(i<1 || i>3)
return 0;

switch(i)
{
case 1:
jiao();
break;
case 2:
bing();
break;
case 3:
cha();
break;
}
display();
system("pause");
return 0;
}