黑马程序员技术交流社区

标题: 12月26日技术分题---获取单元格位置--代码 [打印本页]

作者: 许晓华    时间: 2013-1-6 18:59
标题: 12月26日技术分题---获取单元格位置--代码
本帖最后由 许晓华 于 2013-1-7 08:56 编辑

滔哥误以为我没加阅读权限,不给加技术分。其实我是有加的。
原帖地址:http://bbs.itheima.com/thread-34854-1-2.html
题目分析:其实就是Excel单元格列的编号。(自己打开一个Excel文档看一下)
Z对应26 , AA对应27, ZZ对应702, AAA对应703.
这个题目,其实是蓝桥杯全国软件大赛2012决赛C高职第3
代码如下: import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FlowLayout;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class heima
{
        private JFrame f=new JFrame("黑马训练营-12月26日技术分题-获取单元格位置");//Frame的标题
        FlowLayout layout=new FlowLayout();//创建一个流布局管理器
        JLabel lbl=new JLabel("请输入(行,列):");//整个标签出来
        JTextField tf=new JTextField(10);//整个文本框出来,宽度的列数为10
        JButton b=new JButton("转换");//新建一个按钮,单击时触发事件
        JLabel lbl2=new JLabel();//另一个标签,显示结果的
        public heima()//构造函数哦
        {
                f.setSize(300, 300);//设置Frame的大小
                f.setLocation(new Point(100,300));//位置
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭操作
                f.setLayout(layout);//默认布局为居中对齐
                f.add(lbl);//把这些控件整进Frame里,下同
                f.add(tf);
                f.add(b);
                f.add(lbl2);
                f.setVisible(true);//就是废弃的show啦,让Frame可见        
        }
        public void init()//注册事件监听器
        {
                b.addActionListener(new OkListener());
        }        
        class OkListener implements ActionListener//定义事件监听器类
        {
                //定义事件处理器方法,用于响应特定的事件
                public void actionPerformed(ActionEvent e)
                {               
                        String s=tf.getText();//获得文本框输入的内容,赋值给字符串s
                        String []pos=s.split(",");//把输入的行,列,使用split方法以,作为分割符分开,存进字符串数组pos里
                        int t=Integer.parseInt(pos[1]);//数组第1个元素是列,转成整数
                        String result="";//存放最后的转换结果
                        while(t>0)//核心代码只有while语句里的两行
                        {
                         result=(char)((t-1)%26+'A')+result;
                         t=(t-1)/26;                     
                        }
                        result=pos[0]+result;//行号直接连接上                        
                        lbl2.setText(result);//将结果显示在第2个文本框上
                }               
        }
        public static void main(String args[])
        {
                new heima().init();        //生成一个匿名对象,调用init方法
        }
}


作者: 许晓华    时间: 2013-1-6 23:55
本帖最后由 许晓华 于 2013-1-7 10:39 编辑

多谢两位版主。改进的代码我明天发上来。
作者: 郑枫    时间: 2013-1-7 08:49
哥们,你很叼。
作者: 许晓华    时间: 2013-1-7 08:58
舒远版主,核心代码我改为两行(while里的),帮我看看是否还能更好的改进,谢谢!
作者: 许晓华    时间: 2013-1-7 10:37
许晓华 发表于 2013-1-7 08:58
舒远版主,核心代码我改为两行(while里的),帮我看看是否还能更好的改进,谢谢! ...

多谢版主!thanks:P
作者: 许晓华    时间: 2013-1-7 10:37
郑枫 发表于 2013-1-7 08:49
哥们,你很叼。

多谢,在版主的提示下,我把代码 改进了下。
作者: 郑枫    时间: 2013-1-7 13:01
亲,看了一下,感觉你这程序不够安全,
例如输入  ,,       ,22    等。。如果输入中没有,了呢?
还有如果输入的不是数字呢?

作者: 许晓华    时间: 2013-1-14 23:20
郑枫 发表于 2013-1-7 13:01
亲,看了一下,感觉你这程序不够安全,
例如输入  ,,       ,22    等。。如果输入中没有,了呢?
还有如 ...

是的,异常处理神马的没有整,多谢提醒哦。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2