前提・実現したいこと
javaで電卓(整数の入力のみ)を作成しています。
ソースコードの185行目 BigDecimal ansbi = i2.divide(k2);の部分でjava.lang.PointerExceptionのエラーが出ていて解決できないので、解決したいです。
また、割り算の結果を小数点が出る様にしたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
エラーメッセージ
java.lang.PointerException
該当のソースコード
java
1ソースコード 2import javax.swing.JFrame; 3import javax.swing.JPanel; 4import javax.swing.JButton; 5import javax.swing.JTextField; 6import javax.swing.border.LineBorder; 7import java.awt.BorderLayout; 8import java.awt.GridLayout; 9import java.awt.Color; 10import java.awt.Font; 11import java.awt.Dimension; 12import java.awt.event. *; 13import java.math.BigDecimal; 14 15public class Dentaku extends JFrame implements ActionListener{ 16 17 JTextField jtf = new JTextField(20); 18 19 //ボタン作成 20 JButton btn1 = new JButton("1"); 21 JButton btn2 = new JButton("2"); 22 JButton btn3 = new JButton("3"); 23 JButton btn4 = new JButton("4"); 24 JButton btn5 = new JButton("5"); 25 JButton btn6 = new JButton("6"); 26 JButton btn7 = new JButton("7"); 27 JButton btn8 = new JButton("8"); 28 JButton btn9 = new JButton("9"); 29 JButton btnTasu = new JButton("+"); 30 JButton btnHiku = new JButton("-"); 31 JButton btnKakeru = new JButton("×"); 32 JButton btnWaru = new JButton("÷"); 33 JButton btnIkoru = new JButton("="); 34 JButton btn0 = new JButton("0"); 35 JButton btnClear = new JButton("AC"); 36 37 38 static int i = 0;//最初の数をString→intにする。 39 static int j = 0;//加減乗除判別 40 static BigDecimal i2; //割り算用最初の数 41 static BigDecimal k2;//割り算用次の数 42 43 44 45 public static void main(String[] args){ 46 Dentaku jf = new Dentaku(); 47 48 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 49 jf.setVisible(true); 50 51 } 52 Dentaku(){ 53 54 //フレームの作成 55 setBounds(100, 100, 500, 500); 56 setTitle("自作電卓"); 57 58 //上側のパネルの作成 59 JPanel jp1 = new JPanel(); 60 jp1.setBackground(Color.BLACK); 61 jp1.setPreferredSize(new Dimension(500, 100)); 62 jp1.setLayout(new BorderLayout()); 63 64 //真ん中のパネルの作成 65 JPanel jp2 = new JPanel(); 66 jp2.setBackground(Color.RED); 67 68 GridLayout layout = new GridLayout(); 69 layout.setColumns(3); 70 layout.setRows(4); 71 jp2.setLayout(layout); 72 73 74 //ボタンをアクションリスナーに登録 75 btn1.addActionListener(this); 76 btn2.addActionListener(this); 77 btn3.addActionListener(this); 78 btn4.addActionListener(this); 79 btn5.addActionListener(this); 80 btn6.addActionListener(this); 81 btn7.addActionListener(this); 82 btn8.addActionListener(this); 83 btn9.addActionListener(this); 84 btnTasu.addActionListener(this); 85 btnHiku.addActionListener(this); 86 btnKakeru.addActionListener(this); 87 btnWaru.addActionListener(this); 88 btnIkoru.addActionListener(this); 89 btn0.addActionListener(this); 90 btnClear.addActionListener(this); 91 92 //ボタン貼り付け 93 jp2.add(btn1); 94 jp2.add(btn2); 95 jp2.add(btn3); 96 jp2.add(btnTasu); 97 jp2.add(btn4); 98 jp2.add(btn5); 99 jp2.add(btn6); 100 jp2.add(btnHiku); 101 jp2.add(btn7); 102 jp2.add(btn8); 103 jp2.add(btn9); 104 jp2.add(btnKakeru); 105 jp2.add(btnIkoru); 106 jp2.add(btn0); 107 jp2.add(btnClear); 108 jp2.add(btnWaru); 109 110 //テキストフィールド作成 111 jtf.setPreferredSize(new Dimension(300, 80)); 112 jtf.setBorder(new LineBorder(Color.BLACK, 6)); 113 jtf.setFont(new Font("MSゴシック", Font.PLAIN, 32)); 114 115 //テキストフィールド貼り付け 116 jp1.add(jtf); 117 118 //フレームにパネルを張り付ける 119 getContentPane().add(jp1, BorderLayout.NORTH); 120 getContentPane().add(jp2, BorderLayout.CENTER); 121 } 122 123 public void actionPerformed(ActionEvent e){ 124 125 String kazu = jtf.getText(); 126 127 128 if (e.getSource() == btn1 ){ //1のボタンを押した場合 129 jtf.setText( kazu + "1"); 130 }else if (e.getSource() == btn2 ){ //2のボタンを押した場合 131 jtf.setText( kazu + "2"); 132 }else if (e.getSource() == btn3 ){ //3のボタンを押した場合 133 jtf.setText( kazu + "3"); 134 }else if (e.getSource() == btn4 ){ //4のボタンを押した場合 135 jtf.setText( kazu + "4"); 136 }else if (e.getSource() == btn5 ){ //5のボタンを押した場合 137 jtf.setText( kazu + "5"); 138 }else if (e.getSource() == btn6 ){ //6のボタンを押した場合 139 jtf.setText( kazu + "6"); 140 }else if (e.getSource() == btn7 ){ //7のボタンを押した場合 141 jtf.setText( kazu + "7"); 142 }else if (e.getSource() == btn8 ){ //8のボタンを押した場合 143 jtf.setText( kazu + "8"); 144 }else if (e.getSource() == btn9 ){ //9のボタンを押した場合 145 jtf.setText( kazu + "9"); 146 }else if (e.getSource() == btn0 ){ //0のボタンを押した場合 147 jtf.setText( kazu + "0"); 148 }else if (e.getSource() == btnTasu ){ //+のボタンを押した場合 149 i = Integer.parseInt(kazu); 150 j = 1; 151 jtf.setText(""); 152 }else if (e.getSource() == btnHiku ){ //-のボタンを押した場合 153 i = Integer.parseInt(kazu); //String→intに入力した変換 154 j = 2; 155 jtf.setText(""); 156 }else if (e.getSource() == btnKakeru ){ //×のボタンを押した場合 157 i = Integer.parseInt(kazu); //最初の数字をString→intに入力した変換 158 j = 3; 159 jtf.setText(""); 160 }else if (e.getSource() == btnWaru ){ //÷のボタンを押した場合 161 BigDecimal i2 = new BigDecimal(kazu); 162 i = Integer.parseInt(kazu); 163 j = 4; 164 jtf.setText(""); 165 }else if (e.getSource() == btnClear ){ //ACボタンを押した場合 166 167 jtf.setText(""); 168 }else if (e.getSource() == btnIkoru ){ //=のボタンを押した場合 169 BigDecimal k2 = new BigDecimal(kazu); //次の数字をString→intに入力した変換 170 int k = Integer.parseInt(kazu); 171 int ansint = 0; 172 173 if ( j == 1 ){ //足し算の場合 174 ansint = i + k; 175 String ans = String.valueOf(ansint); 176 jtf.setText(ans); 177 }else if ( j == 2 ){ //引き算の場合 178 ansint = i - k; 179 String ans = String.valueOf(ansint); 180 jtf.setText(ans); 181 }else if ( j == 3 ){ //掛け算の場合 182 ansint = i * k; 183 String ans = String.valueOf(ansint); 184 jtf.setText(ans); 185 }else if ( j == 4 ){ //割り算の場合 186 BigDecimal ansbi = i2.divide(k2); 187 String ans = ansbi.toString(); 188 jtf.setText(ans); 189 } 190 191 } 192 } 193 194 195}
コード
試したこと
正直な所、プログラムを始めて2週間ほどの初心者の為、大したことはできていませんが、変数をstaticにした事くらいしか試せていません。
補足情報(FW/ツールのバージョンなど)
OS : Windows10 64bit
Javaのversion : jdk1.8.0_231
回答1件
あなたの回答
tips
プレビュー