2012-05-28 3 views
0

내 코드는 이항을 확장하는 애플릿 용입니다. 나는 그것을 끝내지는 않았지만, 지수는 1과 10 사이의 지수만을 받아 들일 것입니다. 나는 7시에 그것을 얻었다. 그러나 내가 말했던 것처럼, 나는 끝내지 않고 있었다. 내 문제는 이것입니다 : 첫 번째 textField에서 숫자와 변수 (4a와 같은)를 사용할 것입니다. 그리고 내가 쓴 코드는 그 숫자를 고려할 수 없습니다 (변수 만 받아 들일 예정입니다). 그래서 ... 첫 번째 textField가 int가되도록 허용하지 않으려면 어떻게해야합니까? 감사! 가정첫 번째 textField의 String 만 허용하도록하려면 어떻게해야합니까?

import java.applet.Applet; 
import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 
import javax.swing.*; 
import java.text.DecimalFormat; 
import java.util.ArrayList; 
import javax.swing.Action; 

public class BinomialExpander extends JApplet implements ActionListener 
{ 
    JLabel welcome; 
    JLabel directions; 
    JLabel example; 

    JLabel instructions; 
    JLabel startOfBinomial; 
    JLabel plusSign; 
    JLabel forExponent; 
    JLabel endOfBinomial; 

    JTextField firstVar; 
    JTextField txtSecond; 
    JTextField exp; 


    JLabel lblExpanded; 
    JLabel outputExpanded; 
    FlowLayout layout; 

    JButton compute; 

    private int[] pascal1 = {1,1}; 
    private int[] pascal2 = {1,2,1}; 
    private int[] pascal3 = {1,3,3,1}; 
    private int[] pascal4 = {1,4,6,4,1}; 
    private int[] pascal5 = {1,5,10,10,5,1}; 
    private int[] pascal6 = {1,6,15,20,15,6,1}; 
    private int[] pascal7 = {1,7,21,35,35,21,7,1}; 
    private int[] pascal8 = {1,8,28,56,70,56,28,8,1}; 
    private int[] pascal9 = {1,9,36,84,126,84,36,9,1}; 
    private int[] pascal10 = {1,10,45,120,210,120,45,10,1}; 

    private String a; 
    private int y; 
    private int expo; 
    private String x; 

    public void init() 
    { 
     Container c = getContentPane(); 
     c.setBackground(Color.pink); 

     layout = new FlowLayout(); 
     layout.setAlignment(FlowLayout.LEFT); 
     c.setLayout(layout); 
     setSize(500,175); 

     welcome = new JLabel("Welcome to the Binomial Expander Applet!"); 
     welcome.setFont(new Font("Copperplate Gothic Bold", Font.PLAIN, 16)); 
     directions = new JLabel("Enter binomial ONLY in the form: (VARIABLE + NUMBER)^EXPONENT"); 
     directions.setFont(new Font("Times New Roman", Font.PLAIN, 14)); 
     example = new JLabel("EXAMPLE: (x + 2)^2."); 
     instructions = new JLabel("Enter the variable of your binomial:"); 
     startOfBinomial = new JLabel(" ("); 
     firstVar = new JTextField(4); 
     plusSign = new JLabel(" + "); 
     txtSecond = new JTextField(4); 
     endOfBinomial = new JLabel(")"); 
     forExponent = new JLabel("^"); 
     forExponent.setFont(new Font("Times New Roman", Font.PLAIN, 10)); 
     exp = new JTextField(2); 
     compute = new JButton("Compute!"); 
     compute.addActionListener(this); 
     lblExpanded = new JLabel("Your expanded binomial is: "); 
     outputExpanded = new JLabel(""); 
     c.add(welcome); 
     c.add(directions); 
     c.add(example); 
     c.add(instructions); 
     c.add(startOfBinomial); 
     c.add(firstVar); 
     c.add(plusSign); 
     c.add(txtSecond); 
     c.add(endOfBinomial); 
     c.add(forExponent); 
     c.add(exp); 
     c.add(compute); 
     c.add(lblExpanded); 
     c.add(outputExpanded); 
    } 
    public void actionPerformed(ActionEvent event) 
    { 
     a = firstVar.getText(); 
     y = Integer.parseInt(txtSecond.getText()); 
     expo = Integer.parseInt(exp.getText()); 

     outputExpanded.setText(expand()); 
    } 
    public String expand() 
    { 
    if (expo < 1 || expo > 10) 
    { 
     x = "ERROR: Exponent value must be between 1 and 10, inclusive."; 
     return x; 
    } 
    else if (expo == 1) 
    { 
     x = a + "+" + y; 
     return x; 
    } 
    else if (expo == 2) 
    { 
     x = a + "^" + expo + " + " + (pascal2[1] * y) + a + " + " + (pascal2[2] * Math.pow(y, expo)); 
     return x; 
    } 
    else if (expo == 3) 
    { 
     x = a + "^" + expo + " + " + (pascal3[1] * y) + a + "^" + (expo-1) + (pascal3[2] * Math.pow(y, expo-1)) + a + " + " + (Math.pow(y, expo)); 
     return x; 
    } 
    else if (expo == 4) 
    { 
     x = a + "^" + expo + " + " + (pascal4[1] * y) + a + "^" + (expo-1) + " + " + (pascal4[2] * Math.pow(y, expo-2)) + a + "^" + (expo-2) + " + " + (pascal4[3] * 
     Math.pow(y, expo-1)) + a + "+" + (Math.pow(y,expo)); 
     return x; 
    } 
    else if (expo == 5) 
    { 
     x = a + "^" + expo + " + " + (pascal5[1] * y) + a + "^" + (expo-1) + " + " + (pascal5[2] * Math.pow(y,expo-3)) + a + "^" + (expo-2) + " + " + (pascal5[3] * 
     Math.pow(y, expo-2)) + a + "^" + (expo-3) + " + " + (pascal5[4] * Math.pow(y, expo-1)) + a + " + " + (Math.pow(y, expo)); 
     return x; 
    } 
    else if (expo == 6) 
    { 
     x = a + "^" + expo + " + " + (pascal6[1] * y) + a + "^" + (expo-1) + " + " + (pascal6[2] * Math.pow(y, expo-4)) + a + "^" + (expo-2) + " + " + (pascal6[3] * 
     Math.pow(y, expo-3)) + a + "^" + (expo-3) + " + " + (pascal6[4] * Math.pow(y, expo-2)) + a + "^" + (expo-4) + " + " + (pascal6[5] * Math.pow(y, expo-1)) + 
     a + " + " + (Math.pow(y,expo)); 
     return x; 
    } 
    else if (expo == 7) 
    { 
     x = a + "^" + expo + " + " + (pascal7[1] * y) + a + "^" + (expo-1) + " + " + (pascal7[2] * Math.pow(y, expo-5)) + a + "^" + (expo-2) + " + " + (pascal7[3] 
     * Math.pow(y, expo-4)) + a + "^" + (expo-3) + " + " + (pascal7[4] * Math.pow(y, expo-3)) + a + "^" + (expo-4) + " + " + (pascal7[5] * Math.pow(y, expo-2)) 
     + a + "^" + (expo-5) + (pascal7[6] * Math.pow(y, expo-1)) + a + " + " + (Math.pow(y, expo)); 
     return x; 
    } 
    return x; 
    } 
    } 

답변

0

a의 값이 유효한 지 (나는 당신에게 유효한 것이 무엇인지 모른다) String'smatch() 함수를 사용하는 것이 좋습니다. 유효하지 않으면 JDialog을 사용하여 이항 계산이 아닌 오류 메시지를 표시 할 수 있습니다. 여기

public void actionPerformed(ActionEvent event) 
    { 
     a = firstVar.getText(); 
     y = Integer.parseInt(txtSecond.getText()); 
     expo = Integer.parseInt(exp.getText()); 

     if(a.matches(/*Some REGEX*/)) { 
      outputExpanded.setText(expand()); 
     } 
     else { 
      //Use the JDialog 
     } 
    } 

은 페이지입니다 :

String

JDialog

+0

죄송합니다, 이해하지 못했습니다 .... 나는 초보자입니다! – user1404557

+0

그는 대화 상자를 열지 않으면 문자열이 특정 요구 사항과 일치하는지 확인하기 위해 검사를 실행해야한다고 말합니다. – Epicblood

+0

오! 고마워요! 그것은 그것을 고쳤다! – user1404557

0

는 모든 숫자를 취할 것이

a = a.replaceAll("[0-9]*$", ""); 

시도에서 번호를 제거하려는 문자열입니다.

+0

이것은 작동하지 않았지만 ... 감사합니다! – user1404557

0

대답은 위에있는 충분한 질문에 대한 그것은 것

는 다음과 같이 보인다. 내가 좀 신경 쓰게하고 코드가 하드 코딩 된 지침 대신 루프를 사용하여 많이 향상되고 단축 될 수 있음을 지적하십시오.

는 I 빨리 다음 코드 제조 :

공용 static 유동 계수 (INT의 N, INT의 K) { INT의 SUP = 1; int inf = 1; (int i = (n-k) +1)에 대한 , < = n; i ++) { sup * = i; (int i = 2; i < = k; i ++) { inf * = i; } return (sup/inf); }

public static String Binomials(int limit, int y, String variable) { 
    StringBuilder result = new StringBuilder(""); 
    for (int i = 0; i <= limit; i++) { 
     if (i>0) { 
      result.append("+"+variable); 
      if (i>1) { 
       result.append("^" + i); 
      } 
      result.append("*"); 
     } 
     result.append( Math.pow(y, limit-i) * coefficient(limit, i)); 
    } 
    return (result.toString()); 
} 

그것은 철저하게 테스트되지 및 효율성 개선되지하지만 잘 작동하는 것 같다된다. 따라서, 나는 당신이 당신의 방법의 일반적인 버전을 만드는 기초가 될 것이라고 믿습니다.

관련 문제