2017-05-08 114 views
-1

我需要爲使用java的類創建一個upc代碼驗證器。 upc驗證部分完美工作,但我需要一種方法來只接受一個12位數字輸入。如何驗證輸入只接受12位數字的輸入?

任何幫助,將不勝感激。

謝謝! 我的代碼看起來是這樣的:

public class UPC { 

    public static void main(String[] args) { 

     // get input number 
     Scanner Keyboard = new Scanner(System.in); 

     System.out.print("Enter a 12-digit barcode: "); //prompt user for input 
     long input = Keyboard.nextLong(); 
     long number = input; 

     int d11 = (int) (number % 10); 
     number /= 10; 
     int d10 = (int) (number % 10); 
     number /= 10; 
     int d9 = (int) (number % 10); 
     number /= 10; 
     int d8 = (int) (number % 10); 
     number /= 10; 
     int d7 = (int) (number % 10); 
     number /= 10; 
     int d6 = (int) (number % 10); 
     number /= 10; 
     int d5 = (int) (number % 10); 
     number /= 10; 
     int d4 = (int) (number % 10); 
     number /= 10; 
     int d3 = (int) (number % 10); 
     number /= 10; 
     int d2 = (int) (number % 10); 
     number /= 10; 
     int d1 = (int) (number % 10); 
     number /= 10; 
     int d0 = (int) (number % 10); 

     int m = d1 + d3 + d5 + d7 + d9; 
     int n = d0 + d2 + d4 + d6 + d8 + d10; 

     int r = (10 - ((m + 3*n) % 10)) % 10; 
     System.out.println("Anatomy of Your UPC Barcode"); 
     System.out.println("===================================="); 
     System.out.println("     UPC: " + input); 
     System.out.println("     NSC: " + d0); 
     System.out.println(" Manufacturer Number: " + d1 + d2 + d3 + d4 + d5); 
     System.out.println("   Product Code: " + d6 + d7 + d8 + d9 + d10); 
     System.out.println("   Family Code: " + d6 + d7 + d8); 
     System.out.println("   Value Code: " + d9 + d10); 
     System.out.println(" Scanned Check Digit: " + d10); 
     System.out.println("Calculated Check Digit: " + d11); 

     if (r == d11) { 
      // is a upc code 
      System.out.println(" Validity status: valid"); 
     } 
     else { 
      // not a upc code 
      System.out.println(" Validity status: invalid"); 
     } 
    } 
} 
+8

'if(str.matches(「\\ d {12}」))' –

+0

編輯我的帖子,不確定在哪裏陳述你剛纔的陳述。 –

回答

0
boolean isOk; 
do { 

    Scanner Keyboard = new Scanner(System.in); 
    System.out.print("Enter a 12-digit barcode: "); //prompt user for input 
    try{ 
     long input = Keyboard.nextLong(); 
     isOk = true; 
    }catch(Exception e){ 
     //non-numeric input detected! 
     isOk = false; 
     Sy...print("Only Numbers allowed! Try again.") 
    } 

    if(isOk){ 
     if(number<100000000000L || number >999999999999L){ 
      //number is not 12 digits 
      isOk = false; 
      Sy...print("Must be 12 digits!! Try again.") 
     }else{ 
      //number is 12 digits. 
      isOk = true; 
     } 
    } 
}while(!isOk); 

//do the rest of your codes here... 

你可以嘗試檢查,如果數量是12位的範圍內。

+0

這個工作完美,但你可以建議添加任何東西,使其驗證輸入是否也只由數字組成?由於運行程序的條件是有一個由12位數字組成的輸入,並且是數字的。 –

+0

@GenMiao喜歡更新的答案? –

0

正如在評論中提到的,你可以使用正則表達式如\\d{12}來檢查數字。

請注意,您不需要追加^前綴和後綴$,通常只是意味着在字符串的開頭和$意味着字符串作爲matches() API的結束會自動爲你做的。

樣品的編號:

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    String barcode = scan.next(); 

    if (barcode.matches("\\d{12}")) { 
     System.out.println("Value " + barcode + " is a valid bar code!"); 
    } 
    else { 
     System.out.println("Invalid bar code."); 
    } 
} 

輸出:

123456789000 
Value 123456789000 is a valid bar code! 

1234567890A 
Invalid bar code. 

參考文獻:

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

它確實有效,但我應該如何將其實施到我的代碼中?如果輸入有效,則需要運行其餘的代碼。 –

+0

只需粘貼你想運行的代碼,例如。 'int m = d1 + d3 + d5 + d7 + d9;'到'.matches(...)'塊中。這是代碼打印的塊內'X是一個有效的條形碼' –