2017-10-05 9 views
1

나는 Luhn 알고리즘을 사용하여 Java에서 체크 숫자를 만들려고 노력해 왔으며, 나는 여기서 완전히 좌절감을 보였다. 나는 첫 번째 단계에서 모든 숫자를 합산합니다. (두 번째 숫자는 두 배로 늘리고 두 배가되면 9를 빼면 9가됩니다.) 아직 합계가 될 것으로 예상되는 값 근처에서는 아무 것도 대답 할 수 없습니다. . 문자열로 "11"을 입력하면 출력 합이 138이 될 때 출력 합계가 3이됩니다. 코드에 무엇이 잘못되었는지 전혀 알 수 없으며 더 많은 경험을 가진 사람이 나를 도울 수 있는지 궁금합니다.Luhn의 체크 디지트 만들기 - Java

import javax.swing.JOptionPane; 
    public class Assignment 
    { public static void main (String []args) 
{ 
    String UserNum; 
    char c; 
    int secondnum, ctwo; 
    secondnum = 0; 
    ctwo = 0; 
    UserNum = JOptionPane.showInputDialog("Please enter a number: "); 
    int len, i; 
    len = UserNum.length(); 
    i = 0; 
    System.out.println(UserNum); 
    while (i < len) { 
     c = UserNum.charAt(i); 
     System.out.println(c); 
     i++; 
     if (i%2==0){ 
      ctwo = c*2; 
      if (ctwo > 9) { 
       ctwo = ctwo - 9; 
       secondnum = secondnum + ctwo; 
      } 
      else { secondnum = secondnum + ctwo; 
      } 
} 
else { 
    secondnum = secondnum + c; 
    } 
    System.out.println(secondnum); 
     } 
    } 
    } 

추가 : 각 개별 숫자의 값을 더하는 것으로 코드를 단순화 한 후에도, 상기 값의 합계는 여전히 멀리 떨어져 있습니다.

답변

0

숫자 자체 대신 각 숫자의 ASCII 값을 사용하고 있습니다. ASCII 코드는 순차적 때문에, 숫자 값을 추출하는 매우 쉽습니다 - 단지 '0'을 빼기 :

c = UserNum.charAt(i) - '0'; // Note that c must be defined as an int 
+1

감사합니다, 나는 그런 경우가 될 줄 알았는데. 그러나 나는 그 장애물을 극복하는 방법을 몰랐다. 이것은 효과가 있었고 해결책으로 받아 들였습니다. – Tealdragon204