步入Java。。。

    初步接触面向对象程序设计,主要了解有关类和对象的概念,同时对封装,继承,多态,接口,抽象类有了一个基本的意识形态,看了一下java的语法大致跟c差不多,和初步了解awt类和一些基本even类的处理,写了一个简单的小计算器.

 

    下面是自己的第一个java程序,一个小计算器。

 

    一些窗口的构造还算简单,还有一些极其简单的事件处理,主要计算器它实现可以任意加多个括号的表达式运算,有点麻烦,需要写点小算法,也就是栈的运用,表达式的处理与计算。

 

package counter;

import java.awt.*;

import java.awt.event.*;

class he //一个表达式处理的类,用到了栈的处理,开两个栈,一个用来存数字一个用来存符号的,根据   符号的优先级选择出栈的次序,

{

 double []a=new double [100];

 char []d=new char[100];

 int i,j,t=0;

 void going()

 {

  switch (d[i])

  {

  case '+':a[j-1]=a[j-1]+a[j];j--;i--;break;

  case '-':a[j-1]=a[j-1]-a[j];j--;i--;break;

  case '*':a[j-1]=a[j-1]*a[j];j--;i--;break;

  case '/':a[j-1]=a[j-1]/a[j];j--;i--;break;

  }

  return;

 }

 double work(String st)

 {

 char []c=new char[100];

  for (i=1;i<=st.length();i++)

   c[i]=st.charAt(i-1);

 i=0;t=1;

  while (true)

  {

   switch (c[t])

   {

   case '(':i++;d[i]='(';t++;break;

   case '+':if ((d[i]!='(')&&(i>0)) { going();}i++;d[i]='+';t++;break;

   case '-':if ((d[i]!='(')&&(i>0)) { going();}i++;d[i]='-';t++;break;

   case '*':if ((d[i]!='+')&&(i>0)&&(d[i]!='-')&&(d[i]!='(')) { going();}i++;d[i]='*';t++;break;

   case '/':if ((d[i]!='+')&&(i>0)&&(d[i]!='-')&&(d[i]!='(')) { going();}i++;d[i]='/';t++;break;

   case ')':while (d[i]!='(') {going();}i--;t++;break;

   }

   if ((c[t]>='0')&&(c[t]<='9'))

   {

   

    int w=0;int r=0;

    while ((c[t]>='0')&&(c[t]<='9'))

    {

    w=w*10+c[t]-48;t++;

    if (r>0) r++;

    if (c[t]=='.') {r=1;t++;}

    }

    j++;if (r>=1) a[j]=w/Math.pow(10,r-1); else a[j]=w;

   }

   if (t>st.length()) break;

   }

  return(a[1]);

 }

}

 

 

 

 

public class Counter extends Frame implements ActionListener{

 /**

  *

  */

 

// 一些基本窗口的设计,面板,按钮,文本框等。

 private static final long serialVersionUID = 3419576415875223435L;

 static Counter frm=new Counter();

 static Button c=new Button("C");

 static Button []b=new Button[25];

 static Panel pnl0=new Panel(new GridLayout(3,3));

 static TextArea lab=new TextArea("",1,1,TextArea.SCROLLBARS_NONE);

 static Panel pnl1=new Panel(new GridLayout(4,2));

 static Panel pnl2=new Panel(new GridLayout(1,3)); String s="";

 static StringBuffer st=new StringBuffer("");

 /**

  *

  * @param args

  */

public static void main(String[] args) {

  // TODO 自动生成方法存根

  

  

  frm.setSize(160,220);

  frm.setTitle("Counter");

  frm.setBackground(Color.blue);

  frm.setLayout(null);

  frm.setResizable(false);

 

 

  lab.setBounds(10,30,110,30);

  lab.setBackground(new Color(240,220,190));

 

 

 

  pnl0.setBounds(10,70,84,105);

  for (int i=1;i<=9;i++)

  {

   b[i]=new Button(""+i);

   pnl0.add(b[i]);

   b[i].addActionListener(frm);

  }

  c.addActionListener(frm);

  pnl1.setBounds(94,70,56,140);

 

  pnl1.add(b[10]=new Button("("));

  pnl1.add(b[11]=new Button(")"));

  pnl1.add(b[12]=new Button("-"));

  pnl1.add(b[16]=new Button("+"));

  pnl1.add(b[17]=new Button("*"));

  pnl1.add(b[18]=new Button("clear"));

  pnl1.add(b[19]=new Button("exit"));

  pnl1.add(b[20]=new Button("="));

  pnl2.setBounds(10,175,84,35);

  pnl2.add(b[14]=new Button("0"));

  pnl2.add(b[15]=new Button("/"));

  pnl2.add(b[13]=new Button("."));

  for (int i=10;i<=20;i++)

   b[i].addActionListener(frm);

  c.setBounds(125,30,25,30);

  frm.add(lab);

  frm.add(pnl0);

  frm.add(pnl1);

  frm.add(pnl2);

  frm.add(c);

  frm.setVisible(true);

  }

 /* (非 Javadoc

  * @sejava.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)

  */

 public void actionPerformed(ActionEvent e)// 一些按钮的事件处理。。

 {

 

  Button btn=(Button) e.getSource();

  for(int i=1;i<=17;i++)

    if (btn==b[i]) st.append(""+b[i].getLabel());

  if (btn==c) st.deleteCharAt(st.length()-1);

  if (btn==b[18]) st.delete(0,st.length());

  lab.setText(st.toString());

  if (btn==b[19])System.exit(0);

  if (btn==b[20]) { he k=new he();lab.setText(""+k.work('('+st.toString()+')'));}

  }

 }

 

就这样了,接下来。。。(待续。。。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值