菜鸡在线求助

啥也不会的菜鸟 2020-03-29 12:17:42
想弄一个取余的计算器,但是一直报错说被除数等于零(运行的时候先按一个数字,再按取余号就报错说被除数为零)如图是程序的代码.
...全文
256 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2020-04-07
  • 打赏
  • 举报
回复
引用 5 楼 啥也不会的菜鸟 的回复:
我试了试,你的这个方法好像行不通,因为我按等号的时候文本框会显示=,这样就有erreo了

@SuppressWarnings("serial")
public class MyFrame extends JFrame implements ActionListener {
	String s[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "%", "=" };
	JPanel contenPanel, jp1;
	JButton bt[] = new JButton[s.length];
	JTextField jtf;
	char before = '0';
	int number = 0;
	boolean operate = false, equal = false;

	public MyFrame() {
		// TODO Auto-generated constructor stub
		setSize(300, 200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setTitle("取余计算器");
		setResizable(false);
		setLocationRelativeTo(null);
		JPanel contentPanel = (JPanel) getContentPane();
		jtf = new JTextField("0");
		jtf.setEditable(false);
		GridLayout layout = new GridLayout(3, 0, 5, 5);
		jp1 = new JPanel();
		jp1.setLayout(layout);
		for (int i = 0; i < s.length; i++) {
			bt[i] = new JButton(s[i]);
			jp1.add(bt[i]);
			bt[i].addActionListener(this);
		}
		contentPanel.add(jp1);
		contentPanel.add(jtf, BorderLayout.NORTH);
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		String str = jtf.getText();
		String btn = ((JButton) arg0.getSource()).getText();
		while(before=='=') {
			 if(!btn.equals("=")&&!btn.equals("%")) {
				 jtf.setText("" + btn);
			 }else {
				 jtf.setText("0");
			 }
			 before='0';
		}
		if (!str.equals("0")) {
			if(before=='%'&& btn.equals("=")){
				compute('=');
			}else if( before=='0' && btn.equals("%")){
				compute('%');
			}else if(!btn.equals("=")&&!btn.equals("%")) {
				jtf.setText(str + btn);
			}
		}else if(!btn.equals("=")&&!btn.equals("%")) {
			jtf.setText("" + btn);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new MyFrame();
	}

	public void compute(char how) {
		int currentNumber = Integer.valueOf(jtf.getText());
		if (how == '%') {
			number = currentNumber;
			jtf.setText("0");
			before = '%';
		} else {
			number = number % currentNumber;
			jtf.setText(String.valueOf(number));
			before = '=';
		}
	}
}

  • 打赏
  • 举报
回复
引用 3 楼 qq_39936465 的回复:
[quote=引用 2 楼 啥也不会的菜鸟 的回复:] 不是的,文本框初始内容确实为0⃣️,但是按下某一个按钮后文本框的内容就变成按过的所有数字了,然后按下运算按钮就进行传值,从而currentNumber的值变成文本框里的数字。而且这个运算结果永远等于按下取余号之前的值
你没看到你的错误是在81行么? 你的程序逻辑有问题,你的程序和你所要实现的根本就是2回事,你的compute方法中的before为‘?’就没有实现过,所以你的number就一直是0。[/quote]我研究了一下,还是不太明白为啥错了,刚开始是?,然后我按下数字后,符号还是?,然后按下运算符,暂时符号还是?,满足第一个if语句,进行赋值,number由0变成文本框中的数字,然后compute方法最后把按下的运算符赋值给before,这样before变成了运算符,然后按下第二次按数字,再按等号调用compute方法进行运算
  • 打赏
  • 举报
回复
引用 4 楼 qq_39936465 的回复:
你的程序看起来真费劲,把actionPerformed改成下面的就好了,为什么监视器里会有循环!

public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		String str = jtf.getText();
		JButton btn = (JButton) arg0.getSource();
		if (btn.getText().equals("=")) {
			compute('=');
			equal = true;
		} else if (btn.getText().equals("%")) {
			compute('%');
			jtf.setText("0");
			equal = false;
		} else if (str.equals("0")) {
			jtf.setText("" + btn.getText());
		} else if (operate) {
			jtf.setText("" + btn.getText());
			operate = false;
		} else {
			jtf.setText(str + btn.getText());
		}

	}

我试了试,你的这个方法好像行不通,因为我按等号的时候文本框会显示=,这样就有erreo了
qq_39936465 2020-04-01
  • 打赏
  • 举报
回复
你的程序看起来真费劲,把actionPerformed改成下面的就好了,为什么监视器里会有循环!

public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub
		String str = jtf.getText();
		JButton btn = (JButton) arg0.getSource();
		if (btn.getText().equals("=")) {
			compute('=');
			equal = true;
		} else if (btn.getText().equals("%")) {
			compute('%');
			jtf.setText("0");
			equal = false;
		} else if (str.equals("0")) {
			jtf.setText("" + btn.getText());
		} else if (operate) {
			jtf.setText("" + btn.getText());
			operate = false;
		} else {
			jtf.setText(str + btn.getText());
		}

	}

  • 打赏
  • 举报
回复
引用 1 楼 qq_39936465 的回复:
[quote=引用 楼主 啥也不会的菜鸟 的回复:] 想弄一个取余的计算器,但是一直报错说被除数等于零(运行的时候先按一个数字,再按取余号就报错说被除数为零)如图是程序的代码
因为你的number初始化就是为零,这是你程序的逻辑问题,按了运算就运算肯定不行啊!起码要等第2个数输入后才行。[/quote]不是的,文本框初始内容确实为0⃣️,但是按下某一个按钮后文本框的内容就变成按过的所有数字了,然后按下运算按钮就进行传值,从而currentNumber的值变成文本框里的数字。而且这个运算结果永远等于按下取余号之前的值
qq_39936465 2020-03-31
  • 打赏
  • 举报
回复
引用 2 楼 啥也不会的菜鸟 的回复:
不是的,文本框初始内容确实为0⃣️,但是按下某一个按钮后文本框的内容就变成按过的所有数字了,然后按下运算按钮就进行传值,从而currentNumber的值变成文本框里的数字。而且这个运算结果永远等于按下取余号之前的值
你没看到你的错误是在81行么? 你的程序逻辑有问题,你的程序和你所要实现的根本就是2回事,你的compute方法中的before为‘?’就没有实现过,所以你的number就一直是0。
qq_39936465 2020-03-30
  • 打赏
  • 举报
回复
引用 楼主 啥也不会的菜鸟 的回复:
想弄一个取余的计算器,但是一直报错说被除数等于零(运行的时候先按一个数字,再按取余号就报错说被除数为零)如图是程序的代码
因为你的number初始化就是为零,这是你程序的逻辑问题,按了运算就运算肯定不行啊!起码要等第2个数输入后才行。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧