-2

Java の単純なバイナリ コード コンバーター (アプレット) に問題があります。

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class dual_convert extends Applet implements ActionListener{
  TextField dual;
  TextField decimal;
  Button dual_b;
  Button decimal_b;
  Label dual_l;
  Label decimal_l;
  int decimal_i;
  String dual_s [];
  int dual_i;
  int decimal_e;

  public void init() {
    setLayout(null);

    dual = new TextField();
    dual.setBounds(90,10,100,25);
    add(dual);

    decimal = new TextField();
    decimal.setBounds(90,40,100,25);
    add(decimal);

    decimal_l = new Label("Decimal:");
    decimal_l.setBounds(10,40,80,25);
    add(decimal_l);

    dual_l = new Label("Binary:");
    dual_l.setBounds(10,10,80,25);
    add(dual_l);

    dual_b = new Button ("Convert");
    dual_b.setBounds(200,10,80,25);
    add(dual_b);
    dual_b.addActionListener(this);

    decimal_b = new Button ("Convert");
    decimal_b.setBounds(200,40,80,25);
    add(decimal_b);
    decimal_b.addActionListener(this);

  }

  public void actionPerformed (ActionEvent e) {
    if (e.getSource()==decimal_b) {
      decimal_i = Integer.parseInt(decimal.getText());  
      int ih = 0;
      dual.setText("");
      while (decimal_i>0) {
        dual.setText((decimal_i % 2)+dual.getText());
        decimal_i = decimal_i / 2; 
        ih++;
      }    
    }

    if (e.getSource()==dual_b) {
      dual_s = dual.getText().split("");
      dual_i = dual_s.length;
      decimal.setText("");
      for (int i=0;dual_i>0;dual_i--) {
        decimal_e = decimal_e + (Integer.parseInt(dual_s[dual_i-1]) * 2^i); 
        i++;
      } 
      decimal.setText(decimal_e+"");       
    } 
  }
}

Convert Binary to Decimal を押すと、この例外がスローされます。

スレッド "AWT-EventQueue-1" java.lang.NumberFormatException での例外: 入力文字列の場合: java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) の "" java.lang.Integer.parseInt(Integer.java: 504) で java.lang.Integer.parseInt(Integer.java:527) で dual_convert.actionPerformed(dual_convert.java:65) で java.awt.Button.processActionEvent(Button.java:409) で java.awt.Button で。 processEvent(Button.java:377) で java.awt.Component.dispatchEventImpl(Component.java:4861) で java.awt.Component.dispatchEvent(Component.java:4687) で java.awt.EventQueue.dispatchEventImpl(EventQueue.java) :729) java.awt.EventQueue$3.run(EventQueue.java:686) で java.awt.EventQueue$3.run(EventQueue.java:688) で java.awt.EventQueue.access$200(EventQueue.java:103) で) Java で。java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) の security.AccessController.doPrivileged(ネイティブ メソッド) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) の java.awt.EventQueue$4.run (EventQueue.java:702) で java.awt.EventQueue$4.run(EventQueue.java:700) で java.security.AccessController.doPrivileged(ネイティブ メソッド) で java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) で) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) で java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt で.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) java.awt.java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で EventDispatchThread.pumpEvents(EventDispatchThread.java:146) java.awt.EventDispatchThread.run(EventDispatchThread.java:91) で

2 進数から 10 進数への変換には、次のシステムを使用します (他にもありますか?)。

100101 = [ ( 1 ) × 25 ] + [ ( 0 ) × 24 ] + [ ( 0 ) × 23 ] + [ ( 1 ) × 22 ] + [ ( 0 ) × 21 ] + [ ( 1 ) × 20 ]

100101 = [ 1 × 32 ] + [ 0 × 16 ] + [ 0 × 8 ] + [ 1 × 4 ] + [ 0 × 2 ] + [ 1 × 1 ]

100101 = 3710

https://en.wikipedia.org/wiki/Binary_number

4

3 に答える 3

0

この行は次のことを示しています。

decimal_i = Integer.parseInt(decimal.getText());

つまり、空の文字列を整数に変換しようとしているという問題があります。これを防ぐ必要があります。

于 2013-08-05T13:15:54.907 に答える
0

これ

dual_s = dual.getText().split("");

String[]先頭に空の文字列を付けて a を返します。現在行っている方法ではなく、 a を使用しchar[]て入力文字列の各文字を格納することをお勧めします。あなたはそれを得ることができます

dual.getText().toCharArray();

Character.digit(char ch, int radix);の代わりに使用してトラバースしInteger.parseInt()ます。

于 2013-08-05T13:49:52.300 に答える