Type mismath:cannot conver from double to double 

解决方案 »

  1.   

    import  java.awt.event.*;
    import  java.awt.*;
    import  javax.swing.*;
    import  java.text.*;
    public class Temperature extends JFrame implements ActionListener{
    JPanel jp;
    JLabel L1;
    JLabel L2;
    JTextField j1,j2;
    JButton jb1,jb2;
    Temperature()//构造函数设定一些组件和布局
    {
    jp=new JPanel(new GridLayout(3,2,5,5));
    L1=new JLabel("华氏温度:");
    L2=new JLabel("摄氏温度:");
    j1=new JTextField(0);
    j2=new JTextField(0);
    jb1=new JButton("华氏转");
    jb2=new JButton("摄氏转");
    jp.add(L1,JLabel.CENTER);
    jp.add(L2);
    jp.add(j1);
    jp.add(j2);
    jp.add(jb1);
    jp.add(jb2);
    setContentPane(jp);
    jb1.addActionListener(this);
    jb2.addActionListener(this);

    }
    public static void main(String args[])//新建一个Temperatrure对象
    {
    Temperature t=new Temperature();
    t.setTitle("温度转换");
    t.setSize(200,200);
    t.setVisible(true);
    }
    public void actionPerformed(ActionEvent e)//响应按钮事件
    {
    Double c=new Double(0.0);
    if(e.getSource()==jb1)
    {
    if(!j1.getText().equals(""))
    {

    c=5d/9d*(Double.parseDouble(j1.getText())-32d);
    NumberFormat formatter = NumberFormat.getNumberInstance();
    formatter.setMaximumFractionDigits(2);
    j2.setText(formatter.format(c));
    }
    else
    {
    JOptionPane.showMessageDialog(null,"请填写你的华氏温度!!");
    }
    }
    else if(e.getSource()==jb2)
    {
    if(!j2.getText().equals(""))
    {
    c=9d/5d*(Double.parseDouble(j2.getText())-32d);
    NumberFormat formatter = NumberFormat.getNumberInstance();
    formatter.setMaximumFractionDigits(2);
    j1.setText(c.toString());
    }
    else
    {
    JOptionPane.showMessageDialog(null,"请填写你的摄氏温度!!");
    }
        }
    }}
    首先,j1.getText()是个String型,String型判断相等要用equals()方法,而=的方法只能判断=号两边是否指向同一内存地址;第二,是类型转换的问题,5/9*(Double.parseDouble(j1.getText())-32)编译器会首先计算5/9这个为int型并未转换为double型所以会造成数据丢失,改为5*(Double.parseDouble(j1.getText())-32)/9就没问题了;第三,弹出对话框最好用JOptionPane来做。
      

  2.   

    有本java事件编程,清华大学出版社的
    挺不错
    建议您抽时间找来看看
      

  3.   

    还有,就是NumberFormat对数据进行格式化,setMaximumFractionDigits(2)就是小数部分最大允许2位保留。
    9d/5d*(Double.parseDouble(j2.getText())-32d)这个也可以,将9和5都事先显示的告诉编译器他们是double型的,这样计算结果也是double型。
    好累啊,给分吧,哈哈
      

  4.   

    还真不是事件的问题,全都是java得基础问题,楼主要好好补习一下基本类型啦(当然也包括String)
      

  5.   

    想请问 这个函数Double.parseDouble是不是新的函数我用的都是Double.valueOf(g2.getText()).doubleValue() 挺麻烦的
      

  6.   

    TO:angues1980(石头心)(JSP学习中)好象按你的代码还是执行不了!编译通不过!请再看一下好吗?
      

  7.   

    我用Eclicpse 3.0进行编译,提示:c=5d/9d*(Double.parseDouble(j1.getText())-32d);这一行
    Type mismatch:Cannot convert from double to Double
      

  8.   

    import  java.awt.event.*;
    import  java.awt.*;
    import  javax.swing.*;
    import  java.text.*;public class Temperature extends JFrame implements ActionListener{
    JPanel jp;
    JLabel L1;
    JLabel L2;
    JTextField j1,j2;
    JButton jb1,jb2;
    Temperature()//构造函数设定一些组件和布局
    {
    jp=new JPanel(new GridLayout(3,2,5,5));
    L1=new JLabel("华氏温度:");
    L2=new JLabel("摄氏温度:");
    j1=new JTextField(0);
    j2=new JTextField(0);
    jb1=new JButton("华氏转");
    jb2=new JButton("摄氏转");
    jp.add(L1,JLabel.CENTER);
    jp.add(L2);
    jp.add(j1);
    jp.add(j2);
    jp.add(jb1);
    jp.add(jb2);
    setContentPane(jp);
    jb1.addActionListener(this);
    jb2.addActionListener(this);

    }
    public static void main(String args[])//新建一个Temperatrure对象
    {
    Temperature t=new Temperature();
    t.setTitle("温度转换");
    t.setSize(200,200);
    t.setVisible(true);
    }
    public void actionPerformed(ActionEvent e)//响应按钮事件
    {
    double c=0d;
    if(e.getSource()==jb1)
    {
    if(!j1.getText().equals(""))
    {

    c=5d/9d*(Double.parseDouble(j1.getText())-32d);
    NumberFormat formatter = NumberFormat.getNumberInstance();
    formatter.setMaximumFractionDigits(2);
    j2.setText(formatter.format(c));
    }
    else
    {
    JOptionPane.showMessageDialog(null,"请填写你的华氏温度!!");
    }
    }
    else if(e.getSource()==jb2)
    {
    if(!j2.getText().equals(""))
    {
    c=9d/5d*Double.parseDouble(j2.getText())+32d;
    NumberFormat formatter = NumberFormat.getNumberInstance();
    formatter.setMaximumFractionDigits(2);
    j1.setText(formatter.format(c));
    }
    else
    {
    JOptionPane.showMessageDialog(null,"请填写你的摄氏温度!!");
    }
        }
    }
    }
    声明的时候c声明为double型。还有,你这个转换根本不对嘛,转换的逻辑写错了,我也给改了。
      

  9.   

    不知道为什么将我以前的c.toString()改成:String.valueOf(c)就可以运行了,也就是说将你现在改的NumberFormat formatter = NumberFormat.getNumberInstance();
    formatter.setMaximumFractionDigits(2);
    j1.setText(formatter.format(c));
    改成:String.valueOf(c)也可以运行了.
    不知toString()与String.valueOf(c),这两种转换有什么区别呢?在网上找了,看了一些还不是很明白!!
      

  10.   

    toString()是从Object继承过来的方法,可以重写,就是将对象转换成字符串。所以这个方法是针对对象来说的,也就是只有Double型可以调用它;
    而String.valueOf()里面的c是基本类型double而不是Double型的对象,String.valueOf()方法是将c的值转换成一个字符串。
    所以你声明的c如果是Double型,就要调用toString()方法转换字符串,而如果声明为基本类型double型就要用String.valueOf()方法。