由于本周有java的实验课,所以本人写相关的博客,来拯救小伙伴!本次试验用到的软件是myeclipse,工作的环境是windows 10,下面我们开始揭晓本次实验的内容:
我们首先定义一个IntergerSet类,用来存放数组内杂乱无章的数据为了要做到从小到大,因此还需用到排序算法(在这里本人使用了冒泡排序)此类的代码如下:
package Test;
import java.util.Scanner;
public class IntegerSet {
int[] a=new int[1000];
int k;
int number;
Scanner scanner=new Scanner(System.in);
public void srpx(){
System.out.println("请输入数字个数k:");
k=scanner.nextInt();
System.out.println("请输入"+k+"个20-80之间的整数(k<=10):");
for(int i=0;i<k;i++){
a[i]=scanner.nextInt();
}
for(int i=0;i<k-1;i++){
for(int j=0;j=a[j+1]){
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
System.out.println("排序后结果为:");
for(int i=0;i<k;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
}
这里首先定义一个a数组,用来存放输入的数据,k代表数组内可存数组的个数,用scanner可以完成数据的输入!在这里定义一个方法srpx()
意思是输入排序,我们将输入的数字一次存放入数组中。因为需要用到排序算法,我们这里运用简单易懂的冒泡排序:
for(int i=0;i<k-1;i++){
for(int j=0;j=a[j+1]){
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
}
接下来我们开始调用这个函数,新建一个Java文件,讲一下代码写入该文件的main函数中!
package Test;
import java.util.*;
public class IntegerSetjg {
private static final int NULL = 0;
//private static final IntegerSet IntegerSet = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int flag = 0;
int count=0;
int count2=0;
int k=0;
int max;
int crsj;
int l;
int r;
int scsj;
int y=0;
int[] b=new int[20];
IntegerSet s1=new IntegerSet();
IntegerSet s2=new IntegerSet();
s1.srpx();
s2.srpx();
if(s1.k>s2.k){
max=s1.k;
}else{
max=s2.k;
}
for(int i=0;i<max;i++){
if(s1.a[i]==s2.a[i]){
flag=1;
//System.out.println("交集为:");
//System.out.print(s1.a[i]+" ");
}else{
flag=0;
}
}
if(flag==1){
System.out.println("s1与s2相等!");
}else{
System.out.println("s1与s2不相等!");
}
System.out.println("交集为:");
for(int i=0;i<max;i++){
for(int j=0;j<max;j++){
if(s1.a[i]==s2.a[j]){
System.out.print(s1.a[i]+" ");
}
}
}
System.out.println();
System.out.println("并集为:");
for(int i=0;i<s1.k;i++){
b[i]=s1.a[i];
}
for(int i=s1.k;i<s1.k+s2.k;i++){
b[i]=s2.a[i-s1.k];
}
for(int i=0;i<s1.k+s2.k-1;i++){
for(int j=0;j=b[j+1]){
int t=b[j+1];
b[j+1]=b[j];
b[j]=t;
}
}
}
for(int i=0;i<s1.k+s2.k-1;i++){
if(b[i]==b[i+1]){
count2++;
for(int j=i;j<s1.k+s2.k-1;j++){
b[j]=b[j+1];
}
}
}
//System.out.print(20-count2/2+" ");
for(int i=0;i<s1.k+s2.k-count2/2;i++){
System.out.print(b[i]+" ");
}
System.out.println();
System.out.println("0代表输入s1,1代表输入s2:");
l=scanner.nextInt();
System.out.println("请输入需要插入的数据:");
crsj=scanner.nextInt();
if(l==0){
if(s1.k==10){
System.out.println("数组长度不够,无法插入!!!");
}else{
s1.a[s1.k++]=crsj;
System.out.print("插入后:");
for(int i=0;i<s1.k;i++){
System.out.print(s1.a[i]+" ");
}
}
}else{
if(s2.k==10){
System.out.println("数组长度不够,无法插入!!!");
}else{
s2.a[s2.k++]=crsj;
System.out.print("插入后:");
for(int i=0;i<s1.k;i++){
System.out.println(s2.a[i]+" ");
}
}
}
System.out.println();
System.out.println("--------------------删除数据-----------------");
System.out.println("0代表输入s1,1代表输入s2:");
r=scanner.nextInt();
System.out.println("请输入需要删除的数据:");
scsj=scanner.nextInt();
if(r==0){
for(int i=0;i<s1.k;i++){
if(s1.a[i]==scsj){
y++;
for(int c=i;c<s1.k;c++){
s1.a[c]=s1.a[c+1];
s1.a[c+1]=NULL;
}
for(int c=0;c<s1.k;c++){
System.out.print("删除后的结果为:");
System.out.print(s1.a[c]+" ");
}
break;
}else{
if(y==s1.k){
System.out.println("找不到该数据,提醒未找到!");
}
}
}
}else{
for(int i=0;i<s2.k;i++){
if(s2.a[i]==scsj){
y++;
for(int c=i;c<s2.k;c++){
s2.a[c]=s2.a[c+1];
s2.a[c+1]=NULL;
}
for(int c=0;c<s2.k;c++){
System.out.print("删除后的结果为:");
System.out.print(s2.a[c]+" ");
}
break;
}else{
if(y==s2.k){
System.out.println("找不到该数据,提醒未找到!");
}
}
}
}
/*for(int p=0;p<count;p++){
for(int i=p;i<10;i++){
if(b[p]==s1.a[i]){
continue;
}else{
k=i;
count++;
b[count]=s1.a[k];
}
}
}
for(int p=0;p<count;p++){
for(int i=p+count1;i<10;i++){
if(b[p]==s2.a[i]){
continue;
}else{
k=i;
count++;
count1++;
b[count]=s2.a[k];
}
}
}
for(int p=0;p<count;p++){
System.out.print(b[p]+" ");
}*/
/*int[] k=new int[10];
int[] c=new int[10];
int count1=0;
int count2=0; */
/* int k=0;
int c=0;
System.out.println();
System.out.println("并集为:");
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(s1.a[i]==s2.a[j]){
System.out.print(s1.a[i]+" ");
}else{
/*for(i=0;i<10;i++){
k[i]=j;
count1++;
}*/
/* k=i;
c=j;
}
}
}
System.out.print(s1.a[k]+" ");
for(int j=0;j<10;j++){
for(int i=0;i<10;i++){
if(s2.a[j]!=s1.a[i]){
/*for(int p=0;p<10;p++){
c[p]=i;
count2++;
}*/
/* c=j;
}
}
}
System.out.print(s2.a[c]+" ");*/
/*for(int i=0;i<count1;i++){
System.out.print(s2.a[k[i]]+" ");
}
for(int i=0;i<count2;i++){
System.out.print(s2.a[c[i]]+" ");
}*/
}
}
在这里本人因为当时心比较急,因此没有优化自己的代码,在这里理解起来会比较繁琐,请大家耐心收听!
代码一开始的定义变量和常量,flag用于作为旗帜,作为判断数组是否相等,如果两个数组相等,则输出1,如果不等则输出0,后续用于判断flag是等于1还是等于0,对应的输出相等或不等!
主要哟关于此段代码:
for(int i=0;i<max;i++){
if(s1.a[i]==s2.a[i]){
flag=1;
//System.out.println("交集为:");
//System.out.print(s1.a[i]+" ");
}else{
flag=0;
}
}
if(flag==1){
System.out.println("s1与s2相等!");
}else{
System.out.println("s1与s2不相等!");
}
之后count,count2,都是用于记录次数的,k用于记录输入数据的数量,max用于记录拥有最大数组长度的数组,其用k长度比较具体代码如下:
if(s1.k>s2.k){
max=s1.k;
}else{
max=s2.k;
}
crsj用于存放存入的数据,scsj用于存放删除的数据!
交集的求法,其实很简单,就是逐个判断每个数据是否相等,如果相等则输出!
求交集的代码如下:
System.out.println("交集为:");
for(int i=0;i<max;i++){
for(int j=0;j<max;j++){
if(s1.a[i]==s2.a[j]){
System.out.print(s1.a[i]+" ");
}
}
}
之后是并举的求法了,本人使用的方法可能比较繁琐,首先我先将这两个数据合并,记录他们的总个数,之后再对其运用冒泡排序,使他从小到大排序完成后,在注意前一项与后一项进行对比,如果相等则将后面的数据往前移替换掉重复的数据,这样就完成了相应的并集要求。
并集代码块如下:
System.out.println("并集为:");
for(int i=0;i<s1.k;i++){
b[i]=s1.a[i];
}
for(int i=s1.k;i<s1.k+s2.k;i++){
b[i]=s2.a[i-s1.k];
}
for(int i=0;i<s1.k+s2.k-1;i++){
for(int j=0;j=b[j+1]){
int t=b[j+1];
b[j+1]=b[j];
b[j]=t;
}
}
}
for(int i=0;i<s1.k+s2.k-1;i++){
if(b[i]==b[i+1]){
count2++;
for(int j=i;j<s1.k+s2.k-1;j++){
b[j]=b[j+1];
}
}
}
//System.out.print(20-count2/2+" ");
for(int i=0;i<s1.k+s2.k-count2/2;i++){
System.out.print(b[i]+" ");
}
接下来就是插入数据(插入到数组的末尾),这个比较简单,直接显示代码块:
System.out.println("0代表输入s1,1代表输入s2:");
l=scanner.nextInt();
System.out.println("请输入需要插入的数据:");
crsj=scanner.nextInt();
if(l==0){
if(s1.k==10){
System.out.println("数组长度不够,无法插入!!!");
}else{
s1.a[s1.k++]=crsj;
System.out.print("插入后:");
for(int i=0;i<s1.k;i++){
System.out.print(s1.a[i]+" ");
}
}
}else{
if(s2.k==10){
System.out.println("数组长度不够,无法插入!!!");
}else{
s2.a[s2.k++]=crsj;
System.out.print("插入后:");
for(int i=0;i<s1.k;i++){
System.out.println(s2.a[i]+" ");
}
}
}
注意的是我这里可以选择插入s1数组还是s2数组!
接下来是删除数据。
代码块为:
System.out.println("--------------------删除数据-----------------");
System.out.println("0代表输入s1,1代表输入s2:");
r=scanner.nextInt();
System.out.println("请输入需要删除的数据:");
scsj=scanner.nextInt();
if(r==0){
for(int i=0;i<s1.k;i++){
if(s1.a[i]==scsj){
y++;
for(int c=i;c<s1.k;c++){
s1.a[c]=s1.a[c+1];
s1.a[c+1]=NULL;
}
for(int c=0;c<s1.k;c++){
System.out.print("删除后的结果为:");
System.out.print(s1.a[c]+" ");
}
break;
}else{
if(y==s1.k){
System.out.println("找不到该数据,提醒未找到!");
}
}
}
}else{
for(int i=0;i<s2.k;i++){
if(s2.a[i]==scsj){
y++;
for(int c=i;c<s2.k;c++){
s2.a[c]=s2.a[c+1];
s2.a[c+1]=NULL;
}
for(int c=0;c<s2.k;c++){
System.out.print("删除后的结果为:");
System.out.print(s2.a[c]+" ");
}
break;
}else{
if(y==s2.k){
System.out.println("找不到该数据,提醒未找到!");
}
}
}
}
由于在调试时,如果没有y的判断时,会使得“找不到该数据,提醒未找到”重复输出,因此用y来判断尝试了所有的次数,到底了就说明没有找到与scsj相同的值!才会输出“找不到”!
这次代码较为繁琐本人在后续的学习中会对他进行相应的优化!