| 回复答案 |
共11条 |
| |
这个问题难度不是很大。 按照他的要求,大体思路是要有输入数据,存入数组,然后排序。 其中选择的下拉菜单,既然是 J2SE ,首选 SWING了,所以同样输入数据也应该是用 文本框或者 文本区域 来输入。 所以是这样: 用 Swing 界面 来设计一个数组排序的程序。包括输入数据,选择算法,输出数据。 |
| 回答者:wudianheng@vip.qq.com - 头衔:开发爱好者 2008-10-10 1:28:00 |
|
| |
/* *(两个数以一个空格作为间隔,且保证输入的是数值,最多排10个数,多于10个的取前10个排); * *步骤:文本段输入->回车->下拉框选择排序方法->点击"排序"按钮; * *快速排序与沟排序等还没代码!!!!!快速排序我今天刚看才; */
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; public class SortDemo extends JFrame implements ActionListener{ //组件成员; private JLabel inputLabel=new JLabel("输入: "); private JTextField inputTf=new JTextField(5); private JLabel selectSorterLabel=new JLabel("排序方法: "); private String []sorters={"冒泡排序","选择排序","快速排序","沟排序",}; private JComboBox sorterList=new JComboBox(sorters); private JButton startBtn=new JButton("排序"); private JLabel sortForeLabel=new JLabel("排序前: "); private JLabel sfl1=new JLabel(); private JLabel sortAfterLabel=new JLabel("排序后: "); private JLabel sfl2=new JLabel(); String outputStr=""; String taText=""; private JTextArea ta=new JTextArea(20,20);//描述排序过程; Float []datas=null; int pArray=0;//数组指针; //构造; public SortDemo(){ super("排序算法演示"); JPanel p=new JPanel(new GridLayout(5,2)); p.add(inputLabel); inputTf.addActionListener(this); p.add(inputTf); p.add(selectSorterLabel); p.add(sorterList); p.add(sortForeLabel); p.add(sfl1); p.add(sortAfterLabel); p.add(sfl2); startBtn.addActionListener(this); p.add(startBtn); add(p,BorderLayout.NORTH); ta.setEditable(false); JScrollPane sp=new JScrollPane(ta); add(sp); setVisible(true); setSize(600,500); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //ActionEvent事件; public void actionPerformed(ActionEvent ae){ if(ae.getSource()==inputTf){ String inputStr=inputTf.getText().trim();//假定输入无误; inputStr+=" ";//为输入的字串加一空格,以便于操作; if(inputStr.equals(" ")){ return; } int strLen=inputStr.length(); datas=new Float[10];//存数,最多为10个数排序; pArray=0;//每次清0; for(int i=0,j=0;i<strLen&&pArray<10;i++){ //i用于扫描字串inputStr中的字符,j用于记录每个数的首位置; //当输入数的个数多于10个时,取前10个排序; char ch=inputStr.charAt(i); if(ch==' '){//空格作为相邻两数的间隔; String subStr=inputStr.substring(j,i); Float flo=Float.parseFloat(subStr); datas[pArray++]=flo; j=i+1;//j指向下个数的开头; } } inputStr=""; for(int i=0;i<pArray;i++){ inputStr+=Float.toString(datas[i])+" "; } sfl1.setText(inputStr);//显示欲排序的数; }// if(ae.getSource()==startBtn){ int sortNo=sorterList.getSelectedIndex();//算法编号; if(datas==null){ return; } sort(datas,sortNo); } } //sort排序方法; public void sort(Float [] _datas,int _sortNo){ switch(_sortNo){ case 0: //冒泡;每次从前i个数中选最大的靠后放; /*不加change可读性会好些*/ taText=""; int iii=1; boolean change=true; //初始化时认为是需要排序的; for(int i=pArray-1;i>=1&&change;i--){ //数组中数的个数为pArray, change=false; //每次先假定不需在交换; for(int j=0;j<i;j++){ if(datas[j]>datas[j+1]){ //交换; change=true; Float temp=datas[j]; datas[j]=datas[j+1]; datas[j+1]=temp; } } //如果进行一次内for后change仍为false,说明已经有序,确实不用在交换了,不用再排了,则退出外for; taText+="第"+iii+"步: "; for(int ii=0;ii<pArray;ii++){ if(ii==pArray-iii){ taText+="*" +Float.toString(datas[ii])+"|"; continue; } taText+=Float.toString(datas[ii])+"|"; } taText+="\n"; iii++; } ta.setText(taText+"\n冒泡就是每次选个最大的向后放!"); outputStr=""; for(int i=0;i<pArray;i++){ outputStr+=Float.toString(datas[i])+" "; } sfl2.setText(outputStr);//显示排序后的数; break; case 1: //选择;每次选出一个最小的靠前放; taText=""; int jjj=1; for(int i=0,j=0;i<pArray-1;i++){ j=i;//用j记录下第i位置,让该位置上的数与其后的所有数比, 找出最小的那个与之交换; for(int k=i+1;k<pArray;k++){ if(datas[k]<datas[j]){ j=k; } } //内for之后j就指向了i位置之后的且比i位置上的数最小的数的位置; if(j!=i){//如果确有这么个位置,则交换; Float temp=datas[i]; datas[i]=datas[j]; datas[j]=temp; } taText+="第"+jjj+"步: "; for(int ii=0;ii<pArray;ii++){ if(ii==jjj-1){ taText+="*"+Float.toString(datas[ii])+"|"; continue; } taText+=Float.toString(datas[ii])+"|"; } taText+="\n"; jjj++; } ta.setText(taText+"\n选择就是每次选个最小的向前放!"); outputStr=""; for(int i=0;i<pArray;i++){ outputStr+=Float.toString(datas[i])+" "; } sfl2.setText(outputStr);//显示排序后的数; break; case 2: //快速排序; case 3: //沟排序; } } //main; public static void main(String[]args){ new SortDemo(); } } |
| 回答者:person123321123@163.com - 头衔:开发爱好者 2007-12-21 22:31:11 |
|
| |
能不能把要求写具体点:比如界面的要求,要用哪几种查找的方法(算法)等 |
| 回答者:dhappy05@126.com - 头衔:开发爱好者 2007-10-21 22:11:05 |
|
|
|
|
| 欢迎使用本系统,智囊团。踊跃回答,赢得积分。 |
|
| 使用有问题请到 帮助 |
|