初步接触面向对象程序设计,主要了解有关类和对象的概念,同时对封装,继承,多态,接口,抽象类有了一个基本的意识形态,看了一下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()+')'));}
}
}
就这样了,接下来。。。(待续。。。)