2017-12-02 6 views
0

はありません私はNumberFormatExceptionがが追加されているが、それは何もしません文字列または数字に13より小さいか16より大きい数字を入力した場合、Catchブロックの文字列/番号の検証

ここでの例外はありますか?このコードは、例外がスローされたい場合は、単にあなたがコードに含める必要があり、トライcatchブロック

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

//CreditCard class 
public class CreditCard { 
    //Variable declaration 

    private JFrame frame; 
    private JPanel panel; 
    private JTextField textField; 
    private JLabel label; 
    private JLabel resLabel; 
    private JButton validateBtn; 

    //Constructor 
    public CreditCard() { 

     frame = new JFrame("Credit Card Details"); 
     frame.setSize(350, 350); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     // create a new panel and add the frame to the panel. 
     panel = new JPanel(); 
     frame.add(panel); 
     panel.setLayout(null); 

     // add label 
     label = new JLabel("Enter Credit Card No."); 
     label.setBounds(10, 20, 165, 25); 
     panel.add(label); 

     // add input text 
     textField = new JTextField(16); 
     textField.setBounds(10, 50, 165, 25); 
     panel.add(textField); 

     // create a validation button 
     validateBtn = new JButton("Validate"); 
     validateBtn.setBounds(10, 80, 80, 25); 
     panel.add(validateBtn); 

     frame.setVisible(true); 

     // set label as valid or invalid 
     resLabel = new JLabel(); 
     resLabel.setBounds(180, 50, 265, 25); 
     panel.add(resLabel); 

     // add event listener 
     validateBtn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       try { 
       String text = textField.getText(); 
       if (text.length() < 13 || text.length() > 16) { 
        resLabel.setText("Entered Value Must Be Between 13-16 Chars"); 
        return; 
       } 
       boolean isValid = validateText(text); 
       if(isValid) 
        resLabel.setText("Credit Card is Valid"); 
       else 
        resLabel.setText("Credit Card is Invalid"); 
       }catch(NumberFormatException f){ 
        System.out.println("Enter Valid Card Number"); 
       } 

      } 

      private boolean validateText(String text) { 
       int rSum = 0, lSum = 0; 
       for (int i = text.length() - 2; i >= 0; i -= 2) { 
        if (!Character.isDigit(text.charAt(i))) 
         return false; 
        int currentNum = Character.getNumericValue(text.charAt(i)); 
        currentNum *= 2; 
        if (currentNum > 9) { 
         int tempSum = 0; 
         while (currentNum >= 10) { 
          tempSum += currentNum % 10; 
          currentNum /= 10; 
         } 
         tempSum += currentNum; 
         currentNum = tempSum; 
        } 
        rSum += currentNum; 
       } 
       System.out.println(rSum); 
       for (int i = text.length() - 1; i >= 0; i -= 2) { 
        if (!Character.isDigit(text.charAt(i))) 
         return false; 
        int currentNum = Character.getNumericValue(text.charAt(i)); 
        lSum += currentNum; 
       } 
       System.out.println(lSum); 
       int totalSum = lSum + rSum; 
       if (totalSum % 10 == 0) 
        return true; 
       return false; 
      } 

     }); 
    } 
} 
+0

catchを使って入力を検証するのではなく、while(input.length <13 || input.length> 16)のような単純なループで行う必要がある処理System.out.println( "Please有効なカード番号、13〜16桁の数字を入力してください: "); *新しいCC番号を読み込み、ここに適切な変数に格納する*} – prsvr

+0

NumberFormatExceptionはキャッチされないためにスローされません –

+0

検証を行うには、必要な 'if'ステートメントと' else'ステートメントがすでに用意されています。なぜ例外を追加したいのか分かりません。 –

答えて

0

で助けを必要とする信用card.Iを検証するためです。あなたはそれが実現したい場所に "throw new NumberFormatException()"を追加することでそれを達成することができます。

例外をスローすると、プログラムが「通常の」方法で実行されなくなるため、説明したような状況で例外をスローすることはお勧めしません。私は "if"ステートメントを使用して入力を確認することをお勧めします - 入力があなたを満たしていれば、次の入力を提供します(次の入力を提供します: "if"正しい入力が行われます)、単にエラーメッセージを書き込むだけです。