2014-01-06 2 views
0

[이제 작동 중입니다!] 퍼센트를 계산해야하는이 코드가 있습니다 (일부 GUI 사용). 그러나 계산 부분이 작동하지 않습니다 ... 어쩌면 당신 중 일부는 대답을 알고 있을까요? 문제는 내가 문자열에서 콘서트를하면 이중이라고 생각합니다. 나는 스웨덴 출신이어서 매우 진절머리 나는 영어를 사용합니다. 그리고 모든 변수 이름은 스웨덴어로되어 있으므로 Google 번역사로 번역했습니다.백분율 계산 부분이 Java에서 작동하지 않습니다.

package Java; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 


public class java { 


public static void main (String []args){ 

    int frameSizeX = 500; 
    int frameSizeY = 135; 

    JPanel p = new JPanel(); 
    p.setPreferredSize(new Dimension(frameSizeX,frameSizeY)); 

    JFrame f = new JFrame ("Percentage"); 
    f.setSize(frameSizeX,frameSizeY); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setResizable(false); 
    f.getContentPane().add(p); 

    JLabel cardiNum = new JLabel ("Cardinal number"); 

    JTextField cardiNumField = new JTextField(); 
    cardiNumField.setPreferredSize(new Dimension(500, 24)); 

    final String talValue = (cardiNumField.getText()); 

    JLabel perc = new JLabel("Percentage"); 

    JTextField percField = new JTextField(); 
    percField.setPreferredSize(new Dimension(500, 24)); 

    final String proValue = (percField.getText()); 

    double D = 0; 

    final JLabel answer = new JLabel("The answer is = " + D); 

    JButton butt = new JButton("Calculate"); 
    butt.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 

      double A = Double.parseDouble(talValue); 
      double B = Double.parseDouble(proValue); 
      double C = A/100; 
      double D = C*B; 

       answer.setText("The answer is" + D); 
      } 
     }); 



    p.add(cardiNum, BorderLayout.AFTER_LINE_ENDS); 
    p.add(cardiNumField, BorderLayout.AFTER_LINE_ENDS); 
    p.add(perc, BorderLayout.AFTER_LINE_ENDS); 
    p.add(percField, BorderLayout.AFTER_LINE_ENDS); 
    p.add(butt); 
    p.add(answer); 

    f.pack(); 
    f.setVisible(true); 

} 
} 
+0

답변 텍스트에 어떤 결과가 표시됩니까? –

+0

"작동하지 않는다"는 것은 무엇을 의미합니까? 예외가 있습니까, 결과가 잘못되었거나 아무 일도 일어나지 않습니까? –

+0

무엇이 잘못되었는지 힌트를 주어야합니다. 입력 내용은 무엇입니까? 이 프로그램이 당신에게 어떤 결과물을 제공합니까? –

답변

1

ActionListener 내에서 JButton이 클릭 된 후에 만 ​​두 개의 문자열을 설정해야하므로 NullPointerException이 발생합니다.

넣어 두 라인 :

final String talValue = (cardiNumField.getText()); 
final String proValue = (percField.getText()); 
JButton에 대한 ActionListener를 내부

과 cardiNumField을 최종 percField하고 작동합니다. 또는, 당신은 단지 두 변수를 제거 할 수 있습니다

마틴 Dinov 언급으로
double A = Double.parseDouble(cardiNumField.getText()); 
double B = Double.parseDouble(percField.getText()); 
+1

작동 중입니다 !!! 정말 고맙습니다! – ntoonio

+0

당신을 진심으로 환영합니다. 옆에있는 작은 체크를 클릭하여 대답을 수락하십시오. –

0

, 문제는 사용자가 그들에 작성하고 버튼을 클릭 할 수 있었다하기 전에 텍스트 상자의 내용을 읽고 있었다이다 . 빈 문자열을 이중 ""으로 변환하려하기 때문에 NumberFormatException이 발생합니다. 따라서 단추 클릭 이벤트 처리기 안에 해당 코드를 넣어야합니다. 이 문제를 해결하려면 추가 텍스트 필드를 최종 작성해야합니다. 즉

final JTextField cardiNumField = new JTextField(); 
final JTextField percField = new JTextField(); 

버튼 클릭 처리기는 익명 내부 클래스이므로 최종 변수에서만 읽을 수 있습니다.

다음 코드는 내가 본 것 같아 보이는 문제를 해결합니다.

public static void main(String[] args) { 

    int frameSizeX = 500; 
    int frameSizeY = 135; 

    JPanel p = new JPanel(); 
    p.setPreferredSize(new Dimension(frameSizeX, frameSizeY)); 

    JFrame f = new JFrame("Percentage"); 
    f.setSize(frameSizeX, frameSizeY); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setResizable(false); 
    f.getContentPane().add(p); 

    JLabel cardiNum = new JLabel("Cardinal number"); 

    final JTextField cardiNumField = new JTextField(); 
    cardiNumField.setPreferredSize(new Dimension(500, 24)); 

    JLabel perc = new JLabel("Percentage"); 

    final JTextField percField = new JTextField(); 
    percField.setPreferredSize(new Dimension(500, 24)); 

    double D = 0; 

    final JLabel answer = new JLabel("The answer is = " + D); 

    JButton butt = new JButton("Calculate"); 
    butt.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 

      double cardinal = Double.parseDouble(cardiNumField.getText()); 
      double percentage = Double.parseDouble(percField.getText()); 

      double C = cardinal/100; 
      double D = C * percentage; 

      answer.setText("The answer is " + D); 
     } 
    }); 

    p.add(cardiNum, BorderLayout.AFTER_LINE_ENDS); 
    p.add(cardiNumField, BorderLayout.AFTER_LINE_ENDS); 
    p.add(perc, BorderLayout.AFTER_LINE_ENDS); 
    p.add(percField, BorderLayout.AFTER_LINE_ENDS); 
    p.add(butt); 
    p.add(answer); 

    f.pack(); 
    f.setVisible(true); 

} 

자바 학습에 대한 행운을 빕니다. 당신은 분명히 그것에 아주 새로운 것입니다! :)