http://pan.baidu.com/s/1mhHDvXu
麻烦会的帮我改一改
Java计算器算不出答案
答案:1 悬赏:0 手机版
解决时间 2021-02-06 22:39
- 提问者网友:niaiwoma
- 2021-02-06 01:47
最佳答案
- 五星知识达人网友:白昼之月
- 2021-02-06 03:12
package test;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener{ //建一个Calculator类继承JFrame实现ActionListener
public static void main (String args[]){
Calculator calculator=new Calculator(); //创建对象calculator
calculator.setVisible(true); //窗口可见
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭图标后结束程序
}
String keys []={"7","8","9","/","sqrt","4","5","6","*","-","1","2","3","+","0","=",".","八进制","十六进制"};//表示计算器的键的名字
String command []={"backspace","C"};//功能键
JButton KEYS []=new JButton[keys.length];//创建键对象
JButton COMMAND[]=new JButton[command.length];//功能键对象
static JTextField resultSet=new JTextField();//建一个文本框
double resultNum; //结果
String operator="";//运算符 <---------------------------
public Calculator() {// 构造函数
super();
init();//初始化计算器
this.setBackground(Color.WHITE);//this代表用当前构造方法创建的对象
this.setTitle("简单计算器"); //窗口标题
this.setLocation(500, 300); //窗口大小
this.pack(); //使组件大小合适
}
void init() { //初始化计算器
resultSet.setHorizontalAlignment(JTextField.RIGHT); //设置文本框内容向右对齐
resultSet.setBackground(Color.WHITE); //设置文本框背景颜色
JPanel keysPanel=new JPanel();//创建一个面板
keysPanel.setLayout(new GridLayout(4,5,3,3)); //设置面板的布局为网格型
for (int i=0;i<keys.length;i++) { //把数字键和符号键设为按钮
KEYS[i]=new JButton(keys[i]);
keysPanel.add(KEYS[i]); //把按钮加到面板中
// KEYS[i].setBackground(Color.BLACK); //设置背景颜色
}
JPanel comPanel=new JPanel(); //创建命令键面板
comPanel.setLayout(new GridLayout(1,2,3,3));//设置面板布局为网格型
for(int i=0;i<command.length;i++) { //把命令键设置为按钮
COMMAND[i]=new JButton(command[i]);
comPanel.add(COMMAND[i]); //把按钮放到面板上
// COMMAND[i].setBackground(Color.BLACK); //设置背景颜色
}
JPanel pane=new JPanel(); //创建面板
pane.setLayout(new BorderLayout()); //面板布局为区域型
pane.add(comPanel,BorderLayout.NORTH); //把命令面板加入到大面板上
pane.add(keysPanel,BorderLayout.CENTER); //把数字键面板加到大面板
getContentPane().setLayout(new BorderLayout()); //设置底层容器的布局为区域型
getContentPane().add(resultSet,BorderLayout.NORTH); //把文本框放到北面
getContentPane().add(pane,BorderLayout.CENTER); //把大面板放到中央
for(int i=0;i<keys.length;i++){
KEYS[i].addActionListener(this);//为按钮添加监听器
}
for(int i=0;i<command.length;i++){
COMMAND[i].addActionListener(this);
}
}
//处理事件
public void actionPerformed(ActionEvent e){
String lable=e.getActionCommand();
if(lable.equals("backspace")){ //如果命令为backspace
backspace();
}
else if (lable.equals("C")){ //如果命令为C
Clear();
}
else if (Character.isDigit(lable.charAt(0))) { //<---------------
if(resultSet.getText().equals("0")){
resultSet.setText("");
}
resultSet.setText(resultSet.getText()+lable);
}
else if (lable.equals(".")){
point();
}
else if(lable.equals("sqrt")){
sqrt();
}
else if(lable.equals("八进制")){
int n=Integer.parseInt(resultSet.getText());
resultSet.setText(Integer.toOctalString(n));
}
else if(lable.equals("十六进制")){
int n=Integer.parseInt(resultSet.getText());
resultSet.setText(Integer.toHexString(n));
}
else if (lable.equals("=")){
equal();
}
else {
doOperation();
resultSet.setText("");
operator=lable;
}
}
void point() {
String s=resultSet.getText();
if(s.indexOf(".")==-1){
resultSet.setText(s+".");
}
}
void equal() {
doOperation();
resultSet.setText(""+resultNum);
operator="";
}
void doOperation() {
double m=Double.parseDouble(resultSet.getText());
if(operator.equals("")){
resultNum=m;
}
if(operator.equals("+")){
resultNum+=m;
}
if(operator.equals("-")){
resultNum-=m;
}
if(operator.equals("*")){
resultNum*=m;
}
if(operator.equals("/")){
resultNum/=m;
}
}
//方法
void sqrt() { //开方
double m=Double.parseDouble(resultSet.getText());
if(m<0){
resultSet.setText("负数不能开根号");
}
else {
resultSet.setText(""+Math.sqrt(m));
}
}
void Clear() { //清零
resultSet.setText("0");
}
void backspace() { //退格
String text =resultSet.getText();
if (text.length()>0){
resultSet.setText(text.substring(0, text.length()-1));//将文本最后一个字符删除
}
else if (text.length()==0){
resultSet.setText("0");
}
}
}
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener{ //建一个Calculator类继承JFrame实现ActionListener
public static void main (String args[]){
Calculator calculator=new Calculator(); //创建对象calculator
calculator.setVisible(true); //窗口可见
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭图标后结束程序
}
String keys []={"7","8","9","/","sqrt","4","5","6","*","-","1","2","3","+","0","=",".","八进制","十六进制"};//表示计算器的键的名字
String command []={"backspace","C"};//功能键
JButton KEYS []=new JButton[keys.length];//创建键对象
JButton COMMAND[]=new JButton[command.length];//功能键对象
static JTextField resultSet=new JTextField();//建一个文本框
double resultNum; //结果
String operator="";//运算符 <---------------------------
public Calculator() {// 构造函数
super();
init();//初始化计算器
this.setBackground(Color.WHITE);//this代表用当前构造方法创建的对象
this.setTitle("简单计算器"); //窗口标题
this.setLocation(500, 300); //窗口大小
this.pack(); //使组件大小合适
}
void init() { //初始化计算器
resultSet.setHorizontalAlignment(JTextField.RIGHT); //设置文本框内容向右对齐
resultSet.setBackground(Color.WHITE); //设置文本框背景颜色
JPanel keysPanel=new JPanel();//创建一个面板
keysPanel.setLayout(new GridLayout(4,5,3,3)); //设置面板的布局为网格型
for (int i=0;i<keys.length;i++) { //把数字键和符号键设为按钮
KEYS[i]=new JButton(keys[i]);
keysPanel.add(KEYS[i]); //把按钮加到面板中
// KEYS[i].setBackground(Color.BLACK); //设置背景颜色
}
JPanel comPanel=new JPanel(); //创建命令键面板
comPanel.setLayout(new GridLayout(1,2,3,3));//设置面板布局为网格型
for(int i=0;i<command.length;i++) { //把命令键设置为按钮
COMMAND[i]=new JButton(command[i]);
comPanel.add(COMMAND[i]); //把按钮放到面板上
// COMMAND[i].setBackground(Color.BLACK); //设置背景颜色
}
JPanel pane=new JPanel(); //创建面板
pane.setLayout(new BorderLayout()); //面板布局为区域型
pane.add(comPanel,BorderLayout.NORTH); //把命令面板加入到大面板上
pane.add(keysPanel,BorderLayout.CENTER); //把数字键面板加到大面板
getContentPane().setLayout(new BorderLayout()); //设置底层容器的布局为区域型
getContentPane().add(resultSet,BorderLayout.NORTH); //把文本框放到北面
getContentPane().add(pane,BorderLayout.CENTER); //把大面板放到中央
for(int i=0;i<keys.length;i++){
KEYS[i].addActionListener(this);//为按钮添加监听器
}
for(int i=0;i<command.length;i++){
COMMAND[i].addActionListener(this);
}
}
//处理事件
public void actionPerformed(ActionEvent e){
String lable=e.getActionCommand();
if(lable.equals("backspace")){ //如果命令为backspace
backspace();
}
else if (lable.equals("C")){ //如果命令为C
Clear();
}
else if (Character.isDigit(lable.charAt(0))) { //<---------------
if(resultSet.getText().equals("0")){
resultSet.setText("");
}
resultSet.setText(resultSet.getText()+lable);
}
else if (lable.equals(".")){
point();
}
else if(lable.equals("sqrt")){
sqrt();
}
else if(lable.equals("八进制")){
int n=Integer.parseInt(resultSet.getText());
resultSet.setText(Integer.toOctalString(n));
}
else if(lable.equals("十六进制")){
int n=Integer.parseInt(resultSet.getText());
resultSet.setText(Integer.toHexString(n));
}
else if (lable.equals("=")){
equal();
}
else {
doOperation();
resultSet.setText("");
operator=lable;
}
}
void point() {
String s=resultSet.getText();
if(s.indexOf(".")==-1){
resultSet.setText(s+".");
}
}
void equal() {
doOperation();
resultSet.setText(""+resultNum);
operator="";
}
void doOperation() {
double m=Double.parseDouble(resultSet.getText());
if(operator.equals("")){
resultNum=m;
}
if(operator.equals("+")){
resultNum+=m;
}
if(operator.equals("-")){
resultNum-=m;
}
if(operator.equals("*")){
resultNum*=m;
}
if(operator.equals("/")){
resultNum/=m;
}
}
//方法
void sqrt() { //开方
double m=Double.parseDouble(resultSet.getText());
if(m<0){
resultSet.setText("负数不能开根号");
}
else {
resultSet.setText(""+Math.sqrt(m));
}
}
void Clear() { //清零
resultSet.setText("0");
}
void backspace() { //退格
String text =resultSet.getText();
if (text.length()>0){
resultSet.setText(text.substring(0, text.length()-1));//将文本最后一个字符删除
}
else if (text.length()==0){
resultSet.setText("0");
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯