轩辕春秋文化论坛 » 设计与修改 » 编程竞赛 (1) 初级难度


2004-12-23 15:22 Maxwell
做一个计算器程序,要求对输入的式子进行计算
式子分两种情况,
1. 整数,前后可能有数量不限的空格,没有正负号
2. 整数符号整数,比如 1 + 3,在整数和符号的前后都可能有数量不限的空格,符号只限加减乘除(+-*/),输入的整数全部大于等于0,运算的结果全部为大于等于0的整数(即不要求计算1/3这种结果非整数的式子)

整数在0-32760之间,运算结果也在0-32760之间,所有运算结果都为整数,如果给定的输入不符合上述要求,那输出结果可以任意。

计算的结果
1. 输出前后不带空格的原整数
2. 输出前后不带空格的运算结果

要求给出源码,还有其他不明确的可以跟帖提问。

2004-12-23 19:44 青木风亮
给出范例数据吧

还有整数的上限 是否涉及高精度?

2004-12-23 20:34 Maxwell
青木风亮真不厚道  ,下面有中级难度的题,去做那个。

整数在0-32760之间,运算结果也在0-32760之间,所有运算结果都为整数,如果给定的输入不符合上述要求,那输出结果可以任意。

2004-12-28 00:45 kingofworl
之前看那个中级的感觉有点无从先手,无意中发现还有这个初级的,虽然学习java已经一个月挂零,不过水平不佳,没完全理解此题目,不过之前受过Maxwell指点,不支持一下说不过去,只能名副其实的抛把砖,重在参与吗,不管是对题目的理解不到位还是代码不够简练规范等等都请大家不吝赐教,我用JCreator,简单测试了一下没问题,下面是代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
public class Jisuan implements ActionListener
{
        JFrame frame;
        JTextField text1,text2,text3,text4;
        JButton button;
        int a,c,d;
        String b;
       
        public Jisuan()
        {
                frame=new JFrame();
                text1=new JTextField(5);
                text2=new JTextField(1);
                text3=new JTextField(5);
                text4=new JTextField(5);
                button=new JButton("计算");
                frame.getContentPane().setLayout(new FlowLayout());
                frame.getContentPane().add(text1);
                frame.getContentPane().add(text2);
                frame.getContentPane().add(text3);
                frame.getContentPane().add(button);
                frame.getContentPane().add(text4);
                frame.pack();
                frame.setVisible(true);
                frame.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                                System.exit(0);
                        }
                });
                button.addActionListener(this);
        }
        public void actionPerformed(ActionEvent e)
        {   
            if(Integer.parseInt(text1.getText().trim())<=32760 &&
               Integer.parseInt(text3.getText().trim())<=32760)
            {
                    a=Integer.parseInt(text1.getText().trim());
                    c=Integer.parseInt(text3.getText().trim());
            }
                else
                {
                        JOptionPane.showMessageDialog(null,"要求大于0小于32760的整数");
                        text1.setText("");
                        text2.setText("");
                        text3.setText("");
                        text4.setText("");
                }
               
                b=text2.getText().trim();
               
                if(text2.getText().trim().equals("+"))
                {   
                    if((a+c)<=32760)
                    {
                            text4.setText((a+c)+"");
                    }
                    else
                    {
                            JOptionPane.showMessageDialog(null,"要求大于0小于32760的整数");
                            text1.setText("");
                            text2.setText("");
                            text3.setText("");
                            text4.setText("");
                    }
                           
                }
                else
                    {
                            if(text2.getText().trim().equals("-"))
                            {   
                                if(a>c)
                                {
                                        text4.setText(""+(a-c));
                                }
                                else
                                {
                                        JOptionPane.showMessageDialog(null,"要求大于0小于32760的整数");
                                        text1.setText("");
                                    text2.setText("");
                                    text3.setText("");
                                        text4.setText("");
                                }
                                   
                            }
                            else
                            {
                                    if(text2.getText().trim().equals("*"))
                                    {
                                            if(a*c<=32760)
                                            {
                                                    text4.setText(""+(a*c));
                                            }
                                            else
                                            {
                                                    JOptionPane.showMessageDialog(null,"要求大于0小于32760的整数");
                                                    text1.setText("");
                                                        text2.setText("");
                                                        text3.setText("");
                                                    text4.setText("");
                                            }
                                    }
                                    else
                                    {
                                            if(text2.getText().trim().equals("/"))
                                            {
                                                    if(a>c && c!=0 && a%c==0)
                                                    {
                                                            text4.setText(""+(a/c));
                                                    }
                                                    else
                                                    {
                                                            JOptionPane.showMessageDialog(null,"要求大于0小于32760的整数");
                                                            text1.setText("");
                                                                text2.setText("");
                                                                text3.setText("");
                                                            text4.setText("");
                                                    }
                                            }
                                            else
                                            {
                                                    JOptionPane.showMessageDialog(null,"运算符只限加减乘除");
                                                    text1.setText("");
                                                        text2.setText("");
                                                        text3.setText("");
                                                    text4.setText("");
                                            }
                                    }
                            }
                    }
               
        }
}
class main
{
        public static void main(String []args)
        {
                new Jisuan();
        }
       
}

2004-12-28 12:35 阿尔法孝直
不止楼主学什么语言?C++?

2004-12-28 14:43 深蓝蝴蝶
回复楼上的,kingofworl用的是java,风格和c++很相似,但也有一些区别,没有了指针


详细看了这个java的程序,总体感觉很不错,格式很清晰
给kingofworl提出几个个人意见         

[color=blue]1。命名规范[/color]
[quote]JTextField text1,text2,text3,text4;
int a,c,d;[/quote]
如果程序代码很大的话,根本不能分清控件了。

[color=blue]2。代码中的问题[/color]
[quote]frame.addWindowListener(new WindowAdapter()
{
        public void windowClosing(WindowEvent e)
        {
        System.exit(0);
        }
});
[/quote]
使用了内部监听,控制程序退出。但是有更简单的方法。如下
[quote][color=red]frame.setDefaultCloseOperation(3);[/color]
[/quote]
这个是固定格式,可是更简便

[color=blue]3。代码简化[/color]
[quote]text1.setText("");
text2.setText("");
text3.setText("");
text4.setText("");
[/quote]
感觉出现了很多次,所以建议使用一个方法会更简便,例如
[quote]public void setVoid(){
        text1.setText("");
        text2.setText("");
        text3.setText("");
        text4.setText("");
}
[/quote]

[color=blue]4。[/color]最重要的!!一个文件可以有多个类,但是[color=red]只能是包含main方法的类使用public,而且该文件名也应该是包含main方法的类名[/color]

[color=blue]5。[/color]多余一句,本程序所需方法函数可以不使用 java.sql.*

2004-12-28 18:07 Maxwell
kingofworl对题目的理解有点小小的失误,比如我限定所有输入的数都在0-65530之间意思是可以忽略掉对数值结果溢出非整数等情况的判断,而不是体现在程序中的。

2004-12-28 23:45 kingofworl
[quote]原帖由[i]Maxwell[/i]于2004-12-28, 18:07:01发表
kingofworl对题目的理解有点小小的失误,比如我限定所有输入的数都在0-65530之间意思是可以忽略掉对数值结果溢出非整数等情况的判断,而不是体现在程序中的。

[/quote]
哈哈,我开始就觉得我没全理解,果不其然,还请Maxwell不厌其烦,再接再厉,多出一些短小精干,对思维发散,知识点综合应用有帮助的题目,在此先谢过了,另外非常感谢深蓝蝴蝶的指点,颇有受益,我发现深蓝蝴蝶也是把括号按规范写的,看来我还得强行扳过来呀,免得以后有什么麻烦

2004-12-29 12:30 小姓
用vbnet轻松搞定

2004-12-29 13:24 Maxwell
你搞定一个贴代码出来让大家看看。

页: [1]
查看完整版本: 编程竞赛 (1) 初级难度


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.