- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习 Java 中的 GUI,我想知道是否有人可以帮助解决我遇到的问题。我正在尝试制作一个计算器,但问题是每当我减去两个数字并单击等号按钮时,它似乎都是将两个数字相加而不是相减。
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JPanel;
class Colorwindow extends JFrame implements ActionListener {
private JButton clear, addition, subtract, divide, multiply, zero, one, two, three, four, five, six, seven, eight, nine, ten, equal;
private JTextField name, name2, name3;
private String inputing, solution, solution2, solution3, solution4;
private boolean AddStatement, SubtractStatement, MultiplyStatement, DivideStatement, statement;
private JButton SButtonList[] = new JButton[6];
private JButton NButtonList[] = new JButton[10];
private String SymbolList[] = {
"+",
"-",
"/",
"*",
"=",
"C"
};
private String NumberList[] = {
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
};
private String NumberList2[] = {
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
};
private double result[] = new double[10];
private double number[] = new double[10];
//AddStatement = false;
Colorwindow() {
super();
setSize(500, 500); //sets size of window
getContentPane().setBackground(Color.GRAY); //sets backgroundcolor to yellow
rows 3 column
JPanel textfont = new JPanel();
name = new JTextField(30);
textfont.add(name); //adds textfield
name.setBackground(Color.CYAN);
Font bigFont = name.getFont().deriveFont(Font.PLAIN, 70 f);
name.setFont(bigFont);
name2 = new JTextField(30);
//textfont.add(name2);//adds textfield
add(textfont, BorderLayout.NORTH);
JPanel rows = new JPanel();
rows.setLayout(new GridLayout(2, 4));
for (int i = 0; i < 10; i++) {
NButtonList[i] = new JButton(NumberList[i]);
rows.add(NButtonList[i]); //add's the buttons
NButtonList[i].addActionListener(this);
add(rows, BorderLayout.CENTER);
}
for (int i = 0; i < 6; i++) {
SButtonList[i] = new JButton(SymbolList[i]);
rows.add(SButtonList[i]); //add's the buttons
SButtonList[i].addActionListener(this);
add(rows, BorderLayout.CENTER);
}
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //closes window button when pressing the x(EXIT_ON_CLOSE)
//add(button);//adds a button to the window//adds componenets to jframe//event
setTitle("Calculator"); //sets title on top of window
}
private static double stringToDouble(String stringObject) {
return Double.parseDouble(stringObject.trim());
}
public void actionPerformed(ActionEvent e) {
try {
PassesCorrect(e);
} catch (NumberFormatException e2) {
name.setText("Please re-press on a number");
}
}
public void PassesCorrect(ActionEvent e) {
String ButtonString = e.getActionCommand();
for (int i = 0; i < 10; i++) {
if (e.getSource() == NButtonList[i]) {
name.setText(name.getText() + NumberList[i]); //appends text
}
}
for (int i = 0; i < 6; i++) {
if (e.getSource() == SButtonList[i]) {
//number = Double.parseDouble(name.getText());
name2.setText(SymbolList[i]);
}
}
if (e.getSource() == SButtonList[0]) //checks if it's addition
{
for (int i = 0; i < 10; i++) {
number[i] = Double.parseDouble(name.getText()); //stores the number that has been entered into an array
}
//solution=name.getText();//gets the text and adds it into a string
name.setText("+"); //sets the number from string and input's it on screen
AddStatement = true;
} else if (e.getSource() == SButtonList[1]) //checks if subtraction
{
for (int i = 0; i < 10; i++) {
number[i] = Double.parseDouble(name.getText());
}
//solution=name.getText();//gets the text and adds it into a string
name.setText("-"); //sets the number from string and input's it on screen
SubtractStatement = true;
} else if (e.getSource() == SButtonList[2]) {
for (int i = 0; i < 10; i++) {
number[i] = Double.parseDouble(name.getText());
}
//solution=name.getText();//gets the text and adds it into a string
name.setText("/"); //sets the number from string and input's it on screen
DivideStatement = true;
} else if (e.getSource() == SButtonList[3]) {
for (int i = 0; i < 10; i++) {
number[i] = Double.parseDouble(name.getText());
}
//solution=name.getText();//gets the text and adds it into a string
name.setText("*"); //sets the number from string and input's it on screen
MultiplyStatement = true;
} else if (e.getSource() == SButtonList[5]) {
name.setText("");
SubtractStatement = false;
AddStatement = false;
DivideStatement = false;
MultiplyStatement = false;
} else if (e.getSource() == SButtonList[4]) //checks if it's equal sign
{
for (int i = 0; i < 10; i++) {
result[i] = Double.parseDouble(name.getText());
}
if (SubtractStatement == true) {
for (int i = 0; i < 10; i++) {
result[i] = number[i] - result[i];
name.setText(Double.toString(result[i]));
}
} else if (AddStatement == true) {
for (int i = 0; i < 10; i++) {
result[i] = number[i] + result[i];
name.setText(Double.toString(result[i]));
}
//result+=number;
} else if (MultiplyStatement == true) {
} else if (DivideStatement == true) {
//result=number/result;
//name.setText(Double.toString(result));
}
SubtractStatement = false;
AddStatement = false;
DivideStatement = false;
MultiplyStatement = false;
}
}
}
public class GUI2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
Colorwindow W1 = new Colorwindow();
W1.setVisible(true);
}
最佳答案
您的问题是您正在读取减法符号作为第二个数字的一部分,然后仍然进行减法。
例如2-3
被编码为 2
和 -3
,然后你执行 first-second
,它变成2-(-3)
本质上是加法。
您可以将其更改为在这两种情况下进行加法,但是一旦您继续进行乘法和除法,就会失败,因为 +4
和 -4
是有效数字,但 *4
和 /4
不是。
相反,这样做
else if(e.getSource()==SButtonList[4])//checks if it's equal sign
{
for(int i =0;i<10;i++)
{
if(name.getText().length()>0) //make sure this string isn't empty
result[i] = Double.parseDouble(name.getText().substring(1));
这将从字符串中获取除第一个字符(即符号)之外的字符。
那是因为我还没有读过你的整个程序,如果在输入此if
时出现没有符号的数字,你可能会最终会剪掉第一个数字,所以要小心。
此外,除非有充分的理由让您在 for
循环中进行每项计算 10 次,否则您应该删除这些内容。您的程序的工作方式相同(刚刚测试过)它)将所有 number[i]
更改为 number
,将 result[i]
更改为 result
,并且 for
1-10 循环已删除。 (您还必须更改 number
和 result
的声明)
关于java - 计算器正在加法而不是减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43554959/
我有一个加号/减号按钮,希望用户不能选择超过 20 个但不知道如何让它工作。我尝试使用 min="1"max="5 属性,但它们不起作用。这是我的代码和一个 fiddle 链接。https://jsf
我正在尝试复制顶部底部图,如示例 here但它没有正确渲染(紫色系列有 +ve 和 -ve 值,绿色为负值)留下杂乱的人工制品。我也在努力创建一个玩具示例来复制这个问题,所以我希望尽管我缺乏数据,但有
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 社区去年审查了是
这个问题在这里已经有了答案: Adding two positive integers gives negative answer.Why? (4 个答案) 关闭 5 年前。 我遇到了一个奇怪的问题
有谁知道如何将字符串值类型 -4,5 或 5,4 转换为 double -4.5 或 5.4? 最佳答案 只需使用 Double.parseDouble(Locale, String); 糟糕,我很困
我正在尝试根据 TextBlob 分类插入一个仅包含“正”或“负”字符串的新数据框列:对于我的 df 的第一行,结果是 ( pos , 0.75, 0.2499999999999997)我想要' 正
我对 VBA 非常陌生,无法理解如何在一个循环中完成 2 个任务。我非常感谢您的帮助。 我已经能够根据第 3 列中的数据更改第 2 列中的数值,但我不明白如何将负值的字体更改为红色。 表格的大小每月都
欢迎, 我正在使用 jquery 通过 POST 发送表单。 这就是我获得值(value)的方式。 var mytext = $("#textareaid").val(); var dataStrin
double d = 0; // random decimal value with it's integral part within the range of Int32 and always p
我有这个字符串: var a='abc123#xyz123'; 我想构建 2 个正则表达式替换函数: 1) 用 '*' 替换所有确实有 future '#'的字符(不包括'#') 所以结果应该是这样的
我正在使用 DialogFragment。当用户从 Gmail 平板电脑应用程序的屏幕与下面示例图片中的编辑文本进行交互时,我希望正面和负面按钮保持在键盘上方。 在我的尝试中不起作用,这是我的 Dia
从组装艺术一书中,我复制了这句话: In the two’s complement system, the H.O. bit of a number is a sign bit. If the H.O
是否有更好更优雅的方法来实现下面的简单代码(diffYear、A 和 B 是数字): diffYear = yearA - yearB; if (diffYear == 0) { A = B
我正在设计一种语言,并尝试确定 true 应该是 0x01 还是 0xFF。显然,所有非零值都将转换为 true,但我正在尝试确定确切的内部表示。 每种选择的优点和缺点是什么? 最佳答案 没关系,只要
在我的 dialogfragment 类的 OnCreateDialog 中,我正在这样做: AlertDialog.Builder builder = new AlertDialog.Builder
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda usin
我偶然发现了一个奇怪的 NSDecimalNumber 行为:对于某些值,调用 integerValue、longValue、longLongValue 等,返回意想不到的值(value)。示例: l
这个问题在这里已经有了答案: Resolving ambiguous overload on function pointer and std::function for a lambda using
我有这个正则表达式来测试用户输入是否有效: value.length === 0 || value === '-' || (!isNaN(parseFloat(value)) && /^-?\d+\.
我想用高斯混合模型拟合数据集,数据集包含大约 120k 个样本,每个样本有大约 130 个维度。当我使用 matlab 执行此操作时,我运行脚本(簇号为 1000): gm = fitgmdist(d
我是一名优秀的程序员,十分优秀!