java线性表的相关操作
1.具体要求
JAVA实训,实现线性表的相关操作,其中操作有:建立线性表、向线性表中插入元素、删除线性表中的元素、修改线性表中的元素、清空线行表、将线性表中的元素显示到操作界面上,所有操作都在GUI界面上进行。
2.结构如下图:
具体代码就不讲解了。直接上效果图和源代码。界面做的有点low大家见谅,因为这是很久之前做的程序了。
3.源代码:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.*;
public class Lis implements ActionListener{
JFrame f;
JPanel p1,p2;
JButton b1,b2,b3,b4,b5,b6,b7,jb1,jb2,jb3,jb4,jb5,jb6,jb7;
JDialog dialog,dialog1,dialog3,dialog4,dialog5;
String str1,str3=" ",message;
String str2=" ";
StringBuffer str4;
JTextField tf,tf1,tf2,tf3,tf4,tf5;
ArrayList<Integer> ar1=new ArrayList<Integer>();
ArrayList<Integer> ar=new ArrayList<Integer>(); //创建ArrayList用于存线性表
public void Lis(){
f=new JFrame("\u7EBF\u6027\u8868\u7684\u76F8\u5173\u64CD\u4F5C");
p1=new JPanel();
p2=new JPanel();
b1=new JButton("线性表的建立");
b2=new JButton("插入元素");
b3=new JButton("删除元素");
b4=new JButton("修改元素");
b5=new JButton("显示操作后的线性表");
b6=new JButton("清空线性表");
b7=new JButton("线性表的合并");
GridLayout grid1=new GridLayout(2,1);
Container cp=f.getContentPane();
FlowLayout grid2=new FlowLayout();
FlowLayout grid3=new FlowLayout();
f.setLayout(grid1);
p1.setLayout(grid2);
p2.setLayout(grid3);
p1.add(b1);
b1.addActionListener(this);
p1.add(b2);
b2.addActionListener(this);
p1.add(b6);
b6.addActionListener(this);
p2.add(b3);
b3.addActionListener(this);
p2.add(b7);
b7.addActionListener(this);
p2.add(b4);
b4.addActionListener(this);
p2.add(b5);
b5.addActionListener(this);
f.add(p1);
f.add(p2);
f.setBounds(50, 50, 370, 200);
f.setVisible(true);
f.addWindowListener(new WinLis());
}
class WinLis extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public static void main(String[] args) {
Lis t=new Lis();
t.Lis();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1) //显示线性表建立对话框
{
dial1();
}
if(e.getSource()==b2)//显示插入元素对话框
{
if(!ar.isEmpty())//判断线性表是否为空,若为空则不弹出插入元素的对话框,否则弹出插入元素的对话框
{
dial2();
}else{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==b3)//显示删除元素对话框
{
if(!ar.isEmpty())//判断线性表是否为空,若为空则不弹出删除元素的对话框,否则弹出删除元素的对话框
{
dial3();
}else{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==b4) //显示修改元素的对话框
{
if(!ar.isEmpty()) //判断线性表是否为空,若为空则不弹出修改元素的对话框,否则弹出修改元素的对话框
{
dial4();
}else{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==b7)
{
if(!ar.isEmpty())//判断线性表是否为空,若为空则不弹出建立线性表的对话框,否则弹出建立线性表的对话框
{
dial5();
}else{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==b6)//清空线性表
{
if(!ar.isEmpty())//判断线性表是否为空,若为空则不清空线性表,否则清空线性表
{
ar.clear();
message=" 成功清空线性表!";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
}else
{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==jb3)//向线性表中插入元素
{
int a1=0,a2;
a1=Integer.parseInt(tf1.getText());
if(a1>=0&&a1<ar.size()) //若要插入元素的位置不对,则提示插入位置错误
{
try{ //若输入元素类型不对,则提示元素类型错误,插入不成功
a2=Integer.parseInt(tf2.getText());
ar.add(a1,a2);
dialog1.dispose();
message=" 元素插入成功!";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
}catch(Exception ee){
JOptionPane.showMessageDialog(f, "你输入的元素有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf2.setText("");
}
}else
{
message="你输入的位置不合法";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
tf1.setText("");
}
}
if(e.getSource()==b5)//显示线性表中的元素
{
if(!ar.isEmpty())//判断线性表是否为空,如果线性表为空,则提示线性表为空,若不为空,则输出线性表
{
TestIterator();
}else
{
JOptionPane.showMessageDialog(f, "线性表为空!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
}
if(e.getSource()==jb1)//向线性表中加入元素,若输入的元素类型不对则提示元素类型有误
{
try{
str1=tf.getText();
int a3=Integer.parseInt(str1);
ar.add(a3);
tf.setText("");
}catch(Exception ee){
JOptionPane.showMessageDialog(f, "你输入的元素有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf.setText("");
}
}
if(e.getSource()==jb6)//向线性表中加入元素,若输入的元素类型不对则提示元素类型有误
{
try{
str1=tf.getText();
int a3=Integer.parseInt(str1);
ar1.add(a3);
tf.setText("");
}catch(Exception ee){
JOptionPane.showMessageDialog(f, "你输入的元素有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf.setText("");
}
}
if(e.getSource()==jb7)//建立第二个线性表,并完成两个线性表的合并和显示显示和并后的线性表
{
for(Object o:ar)
{
if(!ar1.contains(o))
ar1.add((Integer) o);
}
dialog5.dispose();
Iterator it=ar1.iterator();
String message;
String title="显示线性表:";
StringBuffer str4=new StringBuffer();
while(it.hasNext())
{
str4.append(" "+it.next());
}
message="合并后的线性表为:"+str4;
JOptionPane.showMessageDialog(f, message, title, JOptionPane.PLAIN_MESSAGE);
str4.delete(0, str4.length());
ar1.clear();
}
if(e.getSource()==jb2)//退出建立线性表对话框
{
try{
str1=tf.getText();
int a4=Integer.parseInt(str1);
ar.add(a4);
tf.setText("");
dialog.dispose();
message=" 线性表建立成功!";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
}catch(Exception ee){
JOptionPane.showMessageDialog(f, "你输入的元素有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf.setText("");
}
}
if(e.getSource()==jb4)//删除线性表中的元素, 若删除元素位置错误则提示位置错误,否则提示删除元素成功
{
int a5=Integer.parseInt(tf3.getText());
if(a5>=0&&a5<ar.size())
{
ar.remove(a5);
dialog3.dispose();
message=" 成功删除元素!";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(f, "你输入的位置有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf3.setText("");
}
}
if(e.getSource()==jb5)//修改线性表中的元素,若修改位置错误则提示位置错误,
{ //若输入修改后的元素类型不对则提示元素错误,否则提示修改成功
int a8=0;
int a7=Integer.parseInt(tf4.getText());
if(a7>=0&&a7<ar.size())
{
try{
a8=Integer.parseInt(tf5.getText());
ar.set(a7,a8);
dialog4.dispose();
message=" 成功修改元素!";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
}catch(Exception es){JOptionPane.showMessageDialog(f, "你输入的元素有误!", "提示", JOptionPane.INFORMATION_MESSAGE);
tf5.setText("");
}
}else{
message="你输入的位置不合法";
JOptionPane.showMessageDialog(f, message, "提示", JOptionPane.INFORMATION_MESSAGE);
tf4.setText("");
}
}
}
public void TestIterator() //输出线性表
{
Iterator it=ar.iterator();//创建迭代器对象,用于遍历线性表中的元素
String message;
String title="显示线性表:";
StringBuffer str4=new StringBuffer();
while(it.hasNext())
{
str4.append(" "+it.next());
}
message="线性表为:"+str4;
JOptionPane.showMessageDialog(f, message, title, JOptionPane.PLAIN_MESSAGE);//把线性表中的元素显示到对话框中
str4.delete(0, str4.length());
}
public void dial5()//线性表建立的对话框
{
dialog5=new JDialog(f,"线性表合并",true);
Container diacp4=dialog5.getContentPane();
diacp4.setLayout(new GridLayout(2,1));
JPanel jp1=new JPanel(new GridLayout(3,1));
JPanel jp2=new JPanel(new FlowLayout());
JLabel lb1=new JLabel("请输入线性表的一个元素:");
tf=new JTextField(5);
tf.setEditable(true);
jb6=new JButton("加入");
jb7=new JButton("合并");
jp1.add(lb1);
jp1.add(tf);
jp2.add(jb6);
jb6.addActionListener(this);
jp2.add(jb7);
jb7.addActionListener(this);
diacp4.add(jp1);
diacp4.add(jp2);
dialog5.setBounds(150, 150, 200, 180);
dialog5.setVisible(true);
}
public void dial4()//修改元素的对话框
{
dialog4=new JDialog(f,"修改元素",true);
Container diacp3=dialog4.getContentPane();
diacp3.setLayout(new GridLayout(2,1));
JPanel jp1=new JPanel(new GridLayout(4,1));
JPanel jp2=new JPanel(new FlowLayout());
JLabel lb1=new JLabel("要修改元素的位置为:");
JLabel lb2=new JLabel("修改后的元素为:");
tf4=new JTextField(5);
tf5=new JTextField(5);
jb5=new JButton("确定");
jp1.add(lb1);
jp1.add(tf4);
jp1.add(lb2);
jp1.add(tf5);
jp2.add(jb5);
jb5.addActionListener(this);
diacp3.add(jp1);
diacp3.add(jp2);
dialog4.setBounds(150, 150, 200, 180);
dialog4.setVisible(true);
}
public void dial3()//删除元素的对话框
{
dialog3=new JDialog(f,"删除元素",true);
Container diacp2=dialog3.getContentPane();
diacp2.setLayout(new GridLayout(2,1));
JPanel jp1=new JPanel(new GridLayout(2,1));
JPanel jp2=new JPanel(new FlowLayout());
JLabel lb1=new JLabel("请输入要删除元素的位置:");
tf3=new JTextField(5);
jb4=new JButton("确定");
jp1.add(lb1);
jp1.add(tf3);
jp2.add(jb4);
jb4.addActionListener(this);
diacp2.add(jp1);
diacp2.add(jp2);
dialog3.setBounds(150, 150, 200, 180);
dialog3.setVisible(true);
}
public void dial2()//插入元素的对话框
{
dialog1=new JDialog(f,"插入元素",true);
Container diacp1=dialog1.getContentPane();
diacp1.setLayout(new GridLayout(2,1));
JPanel jp1=new JPanel(new GridLayout(4,1));
JPanel jp2=new JPanel(new FlowLayout());
JLabel lb1=new JLabel("请输入插入元素的位置:");
JLabel lb2=new JLabel("请输入要插入的元素:");
tf1=new JTextField(5);
tf2=new JTextField(5);
jb3=new JButton("确定");
jp1.add(lb1);
jp1.add(tf1);
jp1.add(lb2);
jp1.add(tf2);
jp2.add(jb3);
jb3.addActionListener(this);
diacp1.add(jp1);
diacp1.add(jp2);
dialog1.setBounds(150, 150, 200, 180);
dialog1.setVisible(true);
}
public void dial1()//线性表建立的对话框
{
dialog=new JDialog(f,"线性表的建立",true);
Container diacp=dialog.getContentPane();
diacp.setLayout(new GridLayout(2,1));
JPanel jp1=new JPanel(new GridLayout(3,1));
JPanel jp2=new JPanel(new FlowLayout());
JLabel lb1=new JLabel("请输入线性表的一个元素:");
JLabel lb2=new JLabel("是否继续输入(Yes/No)?");
tf=new JTextField(5);
tf.setEditable(true);
jb1=new JButton("Yes");
jb2=new JButton("No");
jp1.add(lb1);
jp1.add(tf);
jp1.add(lb2);
jp2.add(jb1);
jb1.addActionListener(this);
jp2.add(jb2);
jb2.addActionListener(this);
diacp.add(jp1);
diacp.add(jp2);
dialog.setBounds(150, 150, 200, 180);
dialog.setVisible(true);
}
}