简体   繁体   English

Java GUI错误-类型不匹配:无法从字符串转换为双精度

[英]Java GUI error - Type mismatch: cannot convert from String to double

Line 100 cost = JOptionPane.showInputDialog("Cost"); 第100行的cost = JOptionPane.showInputDialog("Cost"); of the attached code is reporting the error "Type mismatch: cannot convert from String to double" - any suggestions what's causing this please? 的附加代码报告错误“类型不匹配:无法从字符串转换为双精度”-任何建议是什么原因引起的?

Basically it's a class that accesses another class 'BookShelf' and this line is part of the actioncommand that accesses the BookShelf class to return costofBookshelf 基本上,这是一个可访问其他类'BookShelf'的类,并且此行是可访问BookShelf类以返回costofBookshelf的actioncommand的一部分

import java.awt.FlowLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.ActionListener; 
import java.util.ArrayList;

public class BookGUI extends JFrame implements ActionListener

{

    //String addBook="";
    // public ArrayList<Book> books;

    Book books = new Book ("", "", 0, "", 0);
    Book book = new Book("", "", 0, "", 0);
    String title  = "";
    String author  = "";
    int year = 0;
    String publisher  = "";
    double cost = 0;

    public BookShelf bookShelf = new BookShelf();
    public static final int WIDTH = 300;
    public static final int HEIGHT = 200;

    //Creates & displays a window of the class FlowLayoutDemo
    public static void main(String[] args)
    {
        BookGUI gui = new BookGUI( );
        gui.setVisible(true);
    }

   // public String getTitle()
   // {
    //    return title;
    //}

    public void setTitle(String title) //this is relevant
    {
        this.title = title;
    }

    public void setAuthor(String author) //this is relevant
    {
        this.author = author;
    }

    public void setYear(int year) //this is relevant
    {
        this.year = year;
    }
    public void setPublisher(String publisher) //this is relevant
    {
        this.publisher = publisher;
    }

    public void setCost(double cost) //this is relevant
    {
        this.cost = cost;
    }

    public BookGUI( )
    {

        setSize(WIDTH, HEIGHT);
        addWindowListener(new WindowDestroyer( ));
        setTitle("GUI Assignment");
        Container content = getContentPane( );

        content.setLayout(new FlowLayout());

        JButton button1 = new JButton("Title");
        content.add(button1);
        button1.addActionListener(this);
        //contentPane.add(button1);

        JButton button2 = new JButton("Cost of Bookshelf");
        content.add(button2);
        button2.addActionListener(this);

        JButton button3 = new JButton("Size of BookShelf");
        content.add(button3);
        button3.addActionListener(this);

        JButton button4 = new JButton("Add Book");
        content.add(button4);
        button4.addActionListener(this);     

    }

    public void actionPerformed(ActionEvent e)
    {
        if (e.getActionCommand().equals("Add Book"))
       //book = JOptionPane.showInputDialog("Add Book");
        {     //set up the book object with all the data passed in
        title = JOptionPane.showInputDialog("Title");
        author = JOptionPane.showInputDialog("Author");
        publisher = JOptionPane.showInputDialog("Publisher");
        ***cost = JOptionPane.showInputDialog("Cost");***
        book.setTitle(title);
        book.setAuthor(author);
        book.setPublisher(publisher);
        bookShelf.addBook(book);

        String message =  "The title of the book is :" + title + 
        "the Author of the Book is : " + author + " and it's published by " + publisher;
        JOptionPane.showMessageDialog(null, message, "Book Details", JOptionPane.PLAIN_MESSAGE);
        }
        else if (e.getActionCommand().equals("Size of BookShelf")) {
            int sizeOfBookShelf = bookShelf.sizeOfBookshelf();
            String message = "The book shelf has " + sizeOfBookShelf + " book(s)";
            JOptionPane.showMessageDialog(this, message);
        }
        else if (e.getActionCommand().equals("Cost of BookShelf")) 
        {
            double costOfBookshelf = bookShelf.costOfBookshelf();
            String message = "The book shelf value is " + costOfBookshelf + "Euro";
            JOptionPane.showMessageDialog(this, message);
        }

    }
}

JOptionPane.showInputDialog returns a String. JOptionPane.showInputDialog返回一个字符串。 You can't assign a String value to a variable of type double. 您不能将String值分配给double类型的变量。

You can use Double.parseDouble to convert the String into a double. 您可以使用Double.parseDouble将String转换为double。

cost is a double and showInputDialog returns a string. cost是双showInputDialog并且showInputDialog返回一个字符串。 So you need to do this: 因此,您需要这样做:

cost = Double.parseDouble(JOptionPane.showInputDialog("Cost"));

However, if this is intended for a production code, you should probably add some validation to make sure the value entered is actually numeric. 但是,如果这是用于生产代码的,则可能应该添加一些验证,以确保输入的值实际上是数字。

cost = Double.parseDouble(JOptionPane.showInputDialog("Cost"));

使用double表示货币可能会给您带来不好的结果 ,您应该考虑改用BigDecimal

You have to parse the string input into a double. 您必须将输入的字符串解析为双精度型。

try {
   code = Double.parseDouble(JOptionPane.showInputDialog("Cost"));
}
catch (NumberFormatException ex){
   code = 0.0;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM