当前位置: 代码迷 >> 综合 >> exercism————ISBN Verifier
  详细解决方案

exercism————ISBN Verifier

热度:62   发布时间:2023-12-13 18:11:21.0

题目:

在这里插入图片描述

解法一:

boolean isbnVerifier(String stringToVerify) {
    int sum = 0;String numbers = stringToVerify.replaceAll("[^0-9X]","").toString();if (numbers.length() != 10 ) {
     throw new IllegalArgumentException("Invalid Argument");}int[] output = convertStringToNumbers(numbers);for (int i = 0; i < numbers.length(); i++) {
    sum += (10 - i) * output[i];}return sum % 11 == 0;}int[] convertStringToNumbers(String s) {
    int[] output = new int[10];char[] sets = {
    '0','1','2','3','4','5','6','7','8','9',};for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == 'A') {
    output[i] = 10;}for (int j = 0; j < 10; j++) {
    if (s.charAt(i) == sets[j]) {
    output[i] = j;}}}return output;}

解法二:

/*** 解法二*/boolean isValid(String stringToVerify) {
    char[] chars = stringToVerify.replaceAll("[^0-9X]","").toCharArray();if (chars.length != 10) {
    throw new IllegalArgumentException("Invalid Argument");}int sum = 0;int subSum = 0;for (int i = 0; i < chars.length; i++) {
    subSum = chars[i] == 'X' ? 10 : (10 - i) * Character.getNumericValue(chars[i]);}return sum % 11 == 0;}

Conclusion:

由于不知道Character类有检测char是否为数字的方法,自己造了个轮子。推荐方法二,简明扼要,beautiful code!