Premetto da subito che non c'è bisogno di guardare tutto il codice perchè so dov'è la riga che da problemi.
Vi descrivo come si comporta la classe BinaryString così non perdete tempo a leggervi tutto il codice.
Tra i campi ha una stringa, ci sono i metodi set() e get() per impostare/leggere la stringa.
Poi c'è il metodo int toValue() che converte la stringa in fixed point.
Inoltre il metodo double toDouble(), supponendo che la stringa sia di 32 caratteri, la converte in ANSI IEE754.
Poi ho l' applet Converter che eredita da JApplet e dall' interfaccia ActionListener.
L' applet converte una stringa digitata in un JTextField in fixed point o in ANSI.
L' utente deve premere il bottone corrispondente.
L' intero applet funziona (si comporta come vorrei) tranne se inserisco un input di 32 caratteri e provo a convertirlo in float.Il problema è alla riga che ho evidenziato:
codice:
output.setText(Double.toString(s.toDouble()));     /* riga "incriminata" */
Qui l' applet proprio non risponde, "ignora" questa riga.Dovrebbe mettere nel JTextField output il risultato della conversione in double di s (che è un oggetto di tipo BinaryString),ma probabilmente fallisce la conversione,cosa sto sbagliando ?
codice:
public void actionPerformed(ActionEvent evt)
    {
        String command = evt.getActionCommand();
        // if clear button pressed
        if(conv.equals(command))
        {
            s.set(input.getText());
            if(s.isValid()==true)
            {
                if(s.length()>32)
                    output.setText(Integer.toString(s.toValue())+"    (overflow)");
                else
                    output.setText(Integer.toString(s.toValue()));
            }
            else
                output.setText("Input not correct ");
        }
        if(conv1.equals(command))
        {
            s.set(input.getText());
            if(s.length()==32)
            {
                output.setText(Double.toString(s.toDouble()));     /* riga "incriminata" */
            }
            else if(s.length()>32)
                output.setText("Too long,must be 32 bits");
            else
                output.setText("Too short,must be 32 bits");
        }
    }
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Converter extends JApplet implements ActionListener
{
    private JTextField input;
    private JTextField output;
    private String conv;
    private String conv1;
    private BinaryString s;
    public void init()
    {
        conv=new String();
        s=new BinaryString();
        conv="to int ";
        conv1="to float";
        Container pane=getContentPane();
        pane.setLayout(new BorderLayout(12,12));
        JLabel title=new JLabel("Converter");
        pane.add(title,BorderLayout.NORTH);
        JPanel center=new JPanel();
        JLabel prompt=new JLabel("String or value ");
        JLabel prompt1=new JLabel("Result: ");
        center.add(prompt);
        input=new JTextField(32);
        output=new JTextField(32);
        center.add(input);
        center.add(output);
        pane.add(center,BorderLayout.CENTER);
        JPanel panel = new JPanel();
        JButton convert=new JButton(conv);
        JButton convert1=new JButton(conv1);
        convert.addActionListener(this);
        convert1.addActionListener(this);
        panel.add(convert);
        panel.add(convert1);
        pane.add(panel,BorderLayout.SOUTH);
    }
    public void actionPerformed(ActionEvent evt)
    {
        String command = evt.getActionCommand();
        // if clear button pressed
        if(conv.equals(command))
        {
            s.set(input.getText());
            if(s.isValid()==true)
            {
                if(s.length()>32)
                    output.setText(Integer.toString(s.toValue())+"    (overflow)");
                else
                    output.setText(Integer.toString(s.toValue()));
            }
            else
                output.setText("Input not correct ");
        }
        if(conv1.equals(command))
        {
            s.set(input.getText());
            if(s.length()==32)
            {
                output.setText(Double.toString(s.toDouble()));     /* riga "incriminata" */
            }
            else if(s.length()>32)
                output.setText("Too long,must be 32 bits");
            else
                output.setText("Too short,must be 32 bits");
        }
    }
}
codice:
public class BinaryString 
{
    private String str;
    public BinaryString()
    {
        str=new String();
    }
    public BinaryString(String s)
    {
        str=new String();
        str=s;
    }
    public int length()
    {
        return str.length();
    }
    public boolean isValid()
    {
        int i;
        boolean result=true;
        char c[]=new char[str.length()];
        c=str.toCharArray();
        for(i=0;i<str.length() && result==true;i++)
            if(c[i]!='0' && c[i]!='1')
                result=false;
        return result;
    }
    public String get()
    {
        return str;
    }
    public void set(String s)
    {
        str=s;
    }
    public int toValue()
    {
        int result=0,i,sub=0,segno=0;
        char c[]=new char[length()];
        c=str.toCharArray();
        if(length()>=32)
        {
            sub=1;
            if(c[31]=='1')
            {
                segno=1;
                result=-1;
            }
        }
        for(i=0;i<length()-sub;i++)
        {
            if(segno==0)
            {
                if(c[i]!='0')
                    result+=power(2,length()-1-i);
            }
            else
            {
                if(c[i]!='1')
                    result-=power(2,length()-1-i);
            }
        }
        return result;
    }
    public int power(int base,int esp)
    {
        if(esp==0)
            return 1;
        else
            return base*power(base,esp-1);
    }
    public double power(double base,int esp)
    {
        if(esp==0)
            return 1;
        else if(esp>0)
            return base*power(base,esp-1);
        else
            return (1/base)*power(base,esp+1);
    }
    public double toDouble()
    {
        char c[]=new char[32];
        char ctemp[]=new char[8];
        String temp;
        int i,exp=0,segno=0,pow=-1;
        double result=0.0,mantissa=0.0;
        c=str.toCharArray();
        if(length()==32)
        {
            if(c[0]=='1')
                segno=1;
            temp=str;
            for(i=1;i<9;i++)
                ctemp[i-1]=c[i];
            str=new String(ctemp);
            segno=toValue()-127;
            str=temp;
            for(i=9;i<32;i++)
            {
                if(c[i]=='1')
                    mantissa+=power(2,pow);
                pow--;
            }
            mantissa+=1.0;
            result=mantissa*power(2,exp);
            if(segno==1)
                result=-result;
        }
        return result;
    }
}