【问题标题】:Exception with a simple binary code converter一个简单的二进制代码转换器的异常
【发布时间】:2013-08-05 11:34:26
【问题描述】:

我在 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]) * 2^i); 
        i++;
      } 
      decimal.setText(decimal_e+"");       
    } 
  }
}

按 Convert Binary to Decimal 会抛出此异常:

线程“AWT-EventQueue-1”中的异常 java.lang.ArrayIndexOutOfBoundsException:8 在 dual.actionPerformed(dual.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.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.awt.EventQueue$3.run(EventQueue.java:686) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 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(Native Method) 在 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.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

对于二进制-->十进制转换我使用这个系统(还有其他的吗?):

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

编辑:在 Talas 发布后有一个新的例外:

线程“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:64) 在 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.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.awt.EventQueue$3.run(EventQueue.java:686) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 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(Native Method) 在 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.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

【问题讨论】:

    标签: java arrays exception binary


    【解决方案1】:

    问题出在这里:

     for (int i=0;dual_i>0;dual_i--) {
        decimal_e = decimal_e + (Integer.parseInt(dual_s[dual_i - 1]) * 2^i); 
        i++;
      } 
    

    您应该使用dual_s[dual_i - 1] 而不是dual_s[dual_i],因为dual_i = dual_s.length; 并且数组索引以0 开头

    【讨论】:

    • 我们正在前进...新的例外:http://pastebin.com/bmqf8SrE
    • 这个问题怎么样?我解决了你的异常吗?
    • 旧的,是的,但随之而来的是新的。
    • 我应该用新的例外发一个新帖子吗,因为我只能接受一个答案。
    • 是的,因为还有另一个例外,问题可能在完全不同的地方。首先,尝试自己找到它,如果没有成功 - 将其发布到 stackoverflow
    【解决方案2】:

    您同时拥有类和一个名为 dual 的文本字段。我对这个编译有点惊讶,但这可能是问题所在。

    【讨论】:

    • 你说得对,这很奇怪,但它可以工作,即使使用其他类名也是如此。 //编辑我已经更改了帖子中的代码。
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2012-06-06
    • 1970-01-01
    • 2012-07-31
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多