import java.awt.*
import java.awt.event.*
import java.lang.StrictMath
public class AddMyFrame extends Frame{
TextField t1,t2,t3
Label l2
Choice ch = new Choice()
Button b1
public AddMyFrame(String str){
super(str)
setBackground(Color.gray)
setLayout(new FlowLayout())
setSize(400,150)
addWindowListener(new WindowAdapter(){
public void windowClosed(WindowEvent e){
System.exit(0)
}
public void windowClosing(WindowEvent e){
System.exit(0)
}
})
initFrame()
}
public void initFrame(){
t1=new TextField(6)
t2=new TextField(6)
t3=new TextField(7)
ch.add("+")
ch.add("-")
ch.add("旅薯旁*")
ch.add("/")
ch.add("%")
ch.add("Sqrt")
l2=new Label("=")
b1=new Button("确定")
ButtonEvent be=new ButtonEvent()
t1.addKeyListener(be)
add(t1)
add(ch)
t2.addKeyListener(be)
add(t2)
add(l2)
add(t3)
b1.addActionListener(be)
add(b1)
}
public static void main(String [] atg){
AddMyFrame m1=new AddMyFrame("常用计算器")
m1.setVisible(true)
}
//------------------------------------------------
class ButtonEvent extends KeyAdapter implements ActionListener{
public void actionPerformed(ActionEvent e){
addMethod()
}
public void addMethod(){
int t1Value=0
int t2Value=0
double t3Value=0
try{
t1Value=Integer.parseInt(t1.getText())
}catch(Exception ex){
t1Value=0
t1.setText("0")
}
try{
t2Value=Integer.parseInt(t2.getText())
}catch(Exception ex){
t2Value=0
t2.setText("0")
}
if(ch.getSelectedItem()==("+")){
t3Value=t1Value+t2Value
t3.setText(String.valueOf(t3Value))
}
else if(ch.getSelectedItem()==("-")){
t3Value=t1Value-t2Value
t3.setText(String.valueOf(t3Value))
}
else if(ch.getSelectedItem()==("*")){
t3Value=t1Value*t2Value
t3.setText(String.valueOf(t3Value))
}
else if(ch.getSelectedItem()==("/")){
t3Value=t1Value/t2Value
t3.setText(String.valueOf(t3Value))
}
else if(ch.getSelectedItem()==("%")){
t3Value=t1Value%t2Value
t3.setText(String.valueOf(t3Value))
}
else if(ch.getSelectedItem()==("Sqrt")){
t3Value=t1Value*t2Value
t3Value=Math.sqrt(t3Value)
t3.setText(String.valueOf(t3Value))
}
}
public void keyReleased(KeyEvent e){
addMethod()
}
}
}
//常用计算器版权@playlong2009先生2009/12/5
你的想法是好的,但是我仔细构思了一遍,太难了。首先难点就是怎么生成题目。也是最难得,因为有太多不确定,弄不好就会出现负数结果的题目。
然后是题目的解答,这个难点就不说了,这个我在几年前就写好了。一直没用上,现在却用上了。
还有,你要窗体,可是我不会用swing
还有你要的四则混合运算是多长的,我总不能写一个有1000多个数字写成的式子吧。
题目中是否涉及到小数
下面是我的计算代手蔽码:
package compute
public class CaculateString {
private String str, s
private int p1, p2
public CaculateString(String str) {
this.str = str
this.clear()
this.check()
}
public String caculate() {
while (isEnd(str)) {
p2 = str.indexOf(")")
if (p2 != -1) {
s = str.substring(0, p2)
p1 = s.lastIndexOf("("旅薯橡)
s = str.substring(p1 + 1, p2)
if (!s.equals("")) {
s = this.caculateNumber(s)
if (p2 == (str.length() - 1))
str = str.substring(0, p1) + s
else
str = str.substring(0, p1) + s + str.substring(p2 + 1)
} else {
str = str.substring(0, p1) + str.substring(p2 + 1)
}
} else
str = this.caculateNumber(str)
}
return str
}
private String caculateNumber(String ss) {
int p3 = 0, p4 = 0, p5 = 0
char b = ' ', c = ' '
String s1 = null, s2 = null
double d1 = 0.0, d2 = 0.0, d3 = 0.0
if (ss.charAt(0) == '+') {
ss = ss.substring(1)
if (ss.indexOf("+") == -1 &&ss.indexOf("-") == -1
&&ss.indexOf("*") == -1 &&ss.indexOf("/") == -1)
return ss
} else if (ss.charAt(0) == '-') {
if (ss.indexOf("+", 1) == -1 &&ss.indexOf("-", 1) == -1
&&ss.indexOf("*", 1) == -1 &&ss.indexOf("拆旁/", 1) == -1)
return ss
}
while (isEnd2(ss)) {
p3 = 0
p4 = 0
p5 = 0
if (ss.indexOf("*") == -1 &&ss.indexOf("/") == -1) {
for (int i = 0i <ss.length()i++) {
b = ss.charAt(i)
if (b == '+' || b == '-') {
if (p3 == 0 &&i != 0) {
p3 = i
c = b
} else if (p3 != 0 &&i != (p3 + 1)) {
p4 = i
break
}
}
}
if (p4 == 0) {
s1 = ss.substring(0, p3)
s2 = ss.substring(p3 + 1)
} else {
s1 = ss.substring(0, p3)
s2 = ss.substring(p3 + 1, p4)
}
d1 = Double.parseDouble(s1)
d2 = Double.parseDouble(s2)
if (c == '+')
d3 = d1 + d2
else if (c == '-')
d3 = d1 - d2
if (p4 == 0)
ss = new Double(d3).toString()
else
ss = new Double(d3).toString() + ss.substring(p4)
} else {
if (ss.indexOf("*") == -1) {
c = '/'
p4 = ss.indexOf("/")
} else if (ss.indexOf("/") == -1) {
c = '*'
p4 = ss.indexOf("*")
} else if (ss.indexOf("*") >ss.indexOf("/")) {
c = '/'
p4 = ss.indexOf("/")
} else if (ss.indexOf("*") <ss.indexOf("/")) {
c = '*'
p4 = ss.indexOf("*")
}
for (int i = p4 - 1i >= 0i--) {
b = ss.charAt(i)
if (b == '+' || b == '-') {
if ((i - 1) != 0 &&ss.charAt(i - 1) != '+'
&&ss.charAt(i - 1) != '-') {
p3 = i
break
} else if ((i - 1) != 0
&&(ss.charAt(i - 1) == '+' || ss.charAt(i - 1) == '-')) {
p3 = i - 1
break
}
}
}
for (int i = p4 + 1i <ss.length()i++) {
b = ss.charAt(i)
if ((b == '+' || b == '-' || b == '*' || b == '/')
&&(i - 1) != p4) {
p5 = i
break
}
}
if (p3 == 0)
s1 = ss.substring(0, p4)
else
s1 = ss.substring(p3 + 1, p4)
if (p5 == 0)
s2 = ss.substring(p4 + 1)
else
s2 = ss.substring(p4 + 1, p5)
d1 = Double.parseDouble(s1)
d2 = Double.parseDouble(s2)
if (c == '*')
d3 = d1 * d2
else if (c == '/')
d3 = d1 / d2
if (p3 == 0 &&p5 == 0)
ss = new Double(d3).toString()
else if (p3 == 0 &&p5 != 0)
ss = new Double(d3).toString() + ss.substring(p5)
else if (p3 != 0 &&p5 == 0)
ss = ss.substring(0, p3 + 1) + new Double(d3).toString()
else if (p3 != 0 &&p5 != 0)
ss = ss.substring(0, p3 + 1) + new Double(d3).toString()
+ ss.substring(p5)
}
}
return ss
}
private boolean isEnd(String str) {
if (str.indexOf("(") != -1 || str.indexOf(")") != -1
|| str.indexOf("+", 1) != -1 || str.indexOf("-", 1) != -1
|| str.indexOf("*", 1) != -1 || str.indexOf("/", 1) != -1)
return true
return false
}
private boolean isEnd2(String ss) {
if (ss.indexOf("+", 1) != -1 || ss.indexOf("-", 1) != -1
|| ss.indexOf("*", 1) != -1 || ss.indexOf("/", 1) != -1)
return true
return false
}
private void clear() {
str = str.replaceAll(" ", "")
}
private void check() {
int right = 0, left = 0
for (int i = 0i <str.length()i++) {
char a = str.charAt(i)
if (a != '0' &&a != '1' &&a != '2' &&a != '3' &&a != '4'
&&a != '5' &&a != '6' &&a != '7' &&a != '8' &&a != '9'
&&a != '+' &&a != '-' &&a != '*' &&a != '/' &&a != '('
&&a != ')' &&a != '.') {
System.exit(0)
}
if (a == '(')
left++
else if (a == ')')
right++
}
if (left != right) {
System.exit(0)
}
}
public static void main(String args[]) {
System.out.println(new CaculateString("((1-(0/3))*7)+8").caculate())
}
}
import java.util.Randomimport java.util.Scanner
public class TestRandom {
public static void main(String[] args) {
Random rand = new Random()
Scanner input = new Scanner(System.in)
while(true){
int a = rand.nextInt(100)
配碧 如州 int b = rand.nextInt(100)
int result = a+b
System.out.println(a+"+"+b+"=?")
int yourGuess=input.nextInt() 渣卖蔽
if(yourGuess == result){
System.out.println("you are right")
}else {
System.out.println("you are wrong")
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)