2012-03-05 37 views
0

我的程序假設有一個GUI來計算輸入數字的平方根。我無法弄清楚爲什麼這個代碼不會編譯。我不斷收到以下錯誤信息:Java - 程序不會編譯/ method getText(double)

找不到符號 符號:方法的getText(雙)

我在做什麼錯?

import java.awt.event.ActionEvent; //Next group of lines import various Java classes 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JCheckBox; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import java.awt.GridLayout; 
import java.text.*; 

public class SquareRoot extends JFrame 
{ 
    public static void main(String[] args) { 
     //Creates Window 
     JFrame frame = new JFrame(); 
     frame.setSize(450, 300); 
     frame.setTitle("Find the Square Root"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel Numberlbl = new JLabel("Enter a number:"); 
     final JTextField NumberField = new JTextField(10); 
     NumberField.setText(""); 

     JLabel Answerlbl = new JLabel("Square Root of your number is:"); 
     final JTextField AnswerField = new JTextField(10); 
     AnswerField.setText(""); 

     JLabel ButtonLabel = new JLabel("Calculate Square Root"); 
     JButton button = new JButton("√"); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(Numberlbl); 
     panel.add(NumberField); 
     panel.add(ButtonLabel); 
     panel.add(button); 
     panel.add(Answerlbl); 
     panel.add(AnswerField); 
     frame.add(panel); 

     class CalculateListener implements ActionListener { 

      public void actionPerformed(ActionEvent event) { 

       double NumberX = Double.parseDouble(NumberField.getText()); 
       double Answer = Math.sqrt(NumberX); 
       AnswerField.setText(Answer); 

      } 
     } 

     ActionListener listener = new CalculateListener(); 
     button.addActionListener(listener); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     } 
    } 
+0

如果IDE沒有說錯誤的錯誤,但你會得到錯誤「無法找到符號」可能你有多個JDK版本的計算機上。一個JDK具有NumberField.java。 Secons JDK沒有NumberField.java – Ilya 2012-03-05 20:11:11

+0

刷新你的項目。這個語法在你的課堂中沒有任何方法。我認爲你的IDE指的是不乾淨的東西。 – kosa 2012-03-05 20:15:00

+0

如果你可以按照正常的約定在'camelCase'中命名你的變量,那真的會有所幫助......還有,說*你得到了錯誤信息。我看不到任何對'getText(double)'的調用... ... – 2012-03-05 20:15:10

回答

4

唯一的編譯錯誤是爲AnswerField.setText()行 - 如果你看一下的setText API參考()接受一個字符串,但你想傳遞一個雙。

查看NumberFormat類以正確地將double轉換爲字符串。更簡單的選擇是使用Double對象(與雙數據類型相反,note大寫),並使用它的toString()方法。一個不好用的方法是把它寫成(「」+ Answer),因爲它會自動爲你轉換它。

+0

這種方法有什麼不好? – 2012-03-06 01:45:43

+0

只有它依賴於隱式轉換而不是顯式轉換,並且可能無法按預期工作。例如,在逗號爲小數點的歐洲大陸,它是否正確顯示3.14爲3,14?我不完全確定toString()甚至可以做到這一點。 – JTeagle 2012-03-07 09:30:20

+0

'd = 3.14; 「」+ d'打印3.14,所以''「+ d.toString()'和'String.valueOf(d)' - 一個和另一個一樣髒。 – 2012-03-07 11:32:41

1

代碼將不會編譯,因爲方法setText(String text)需要一個String參數,並且您給它一個double。

爲了讓你的代碼工作,使用方法:

AnswerField.setText(String.valueOf(Answer)); 
1
final Double answer = Math.sqrt(NumberX); 
AnswerField.setText(answer.toString()); 
0

這一次編譯。這裏你去:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class SquareRoot extends JFrame 
{ 
    public static void main(String[] args) { 
     //Creates Window 
     JFrame frame = new JFrame(); 
     frame.setSize(450, 300); 
     frame.setTitle("Find the Square Root"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel numberlbl = new JLabel("Enter a number:"); 
     final JTextField numberField = new JTextField(10); 
     numberField.setText(""); 

     JLabel answerlbl = new JLabel("Square Root of your number is:"); 
     final JTextField answerField = new JTextField(10); 
     answerField.setText(""); 

     JLabel buttonLabel = new JLabel("Calculate Square Root"); 
     JButton button = new JButton("√"); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(3,2)); 
     panel.add(numberlbl); 
     panel.add(numberField); 
     panel.add(buttonLabel); 
     panel.add(button); 
     panel.add(answerlbl); 
     panel.add(answerField); 
     frame.add(panel); 

     class CalculateListener implements ActionListener { 

      public void actionPerformed(ActionEvent event) { 

       double numberX = Double.parseDouble(numberField.getText()); 
       double answer = Math.sqrt(numberX); 
       answerField.setText(""+answer); 

      } 
     } 

     ActionListener listener = new CalculateListener(); 
     button.addActionListener(listener); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

     } 
    }