我需要一个用Java编写的程序:集合的并、交和差运算。不知道你能不能帮我,谢谢!!!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要一个用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.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实例是保证顺序不变,这样执行多少遍结果一样,看着舒服。 参考技术A 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));
参考技术B 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;
以上是关于我需要一个用Java编写的程序:集合的并、交和差运算。不知道你能不能帮我,谢谢!!!的主要内容,如果未能解决你的问题,请参考以下文章