2017-02-25 2 views
1

Ich habe versucht herauszufinden, warum meine Ausgabe nicht das ist, was sie sein soll. Die Proben gegeben sindUPC Code Probleme

Geben Sie einen UPC (geben Sie eine leere Zeile zu beenden): 036000291453 Prüfziffer sein sollte: 2 Prüfziffer ist: 3 UPC

nicht gültig ist

Geben Sie ein UPC (geben Sie eine leere Linie zu beenden): 036000291452 Prüfziffer sollte sein: 2 Prüfziffer ist: 2 UPC UPC gültig

geben Sie ist (eine Leerzeile beenden) eingeben: ist Ziffer 4 Check:: 014633149077 Prüfziffer sollte 7 UPC ist ungültig

Geben Sie einen UPC ein (geben Sie eine leere Zeile ein, um zu beenden): sollte sein: 4 Prüfziffer ist: 4 UPC ist gültig

Geben Sie einen UPC ein (geben Sie eine leere Zeile ein): 0853911765722 FEHLER! UPC MUSS genau 12 Stellen

Geben Sie ein UPC (eine Leerzeile eingeben beenden): 085391176572 Prüfziffer sollte sein: 2 Prüfziffer ist: eine leere 2 UPC ist gültig

Geben Sie einen UPC (Eingabe Linie zu beenden): Auf Wiedersehen!

dass der Algorithmus des Ausgangs des Erhaltens ist dies von links nach rechts, die Ziffern in den ungeradzahligen Positionen hinzuzufügen (beginnend mit der Zählung ab 1) und das Ergebnis durch 3 multiplizieren Von links nach rechts, fügt die Ziffern in den geradzahligen Positionen zu dem in Schritt 1 berechneten Gesamtwert Nehmen Sie das Ergebnis aus Schritt 2 und berechnen Sie den Rest, wenn Sie durch 10 geteilt werden (Ergebnis Modulo 10). Wenn der Rest nicht Null ist, subtrahiere diesen Rest von 10, um die Prüfziffer zu erhalten. Wenn der Rest gleich Null ist, dann sollte die Prüfziffer sein 0.

String str1 = validinput(in); 
    int odd1 = odd(str1); 
    int even1 = even(str1); 
    int f = (odd1+even1)%10; 
    if(f != 0){ 
     f = 10-f; 
    } 
    System.out.println(odd1); 
    System.out.println(even1); 

    System.out.println("Check digit should be: "+f); 
    System.out.println("Check digit is: "+str1.charAt(11)); 
    int y = Character.getNumericValue(str1.charAt(11)); 
    if (f == y){ 
     System.out.println("UPC is valid"); 
    } 
    else{ 
     System.out.println("UPC is not valid"); 
    } 
} 


private static String validinput(Scanner inScanner){ 

    System.out.print("Enter a UPC (enter a blank line to quit): "); 
    String str = inScanner.nextLine(); 


    while(str.length() != 12){ 
     if (str.length() == 0){ 
      System.out.println("Goodbye"); 
      break; 
     } 
     else{ 
     System.out.println("ERROR! UPC MUST have exactly 12 digits"); 

     System.out.print("Enter a UPC (enter a blank line to quit): "); 
     str = inScanner.nextLine(); 
     } 
    } 
    return str; 
} 


private static int odd(String input){ 
    int i = 1; 
    char ch; 
    int sumOdd = 0; 
    while (i < 11){ 
     ch = input.charAt(i); 
     int x = Character.getNumericValue(ch); 
     sumOdd = x +sumOdd; 
     i += 2; 
    } 
    int Mx3=sumOdd*3; 
    return Mx3; 
} 


private static int even(String input){ 
    int i = 0; 
    char ch; 
    int sumEven = 0; 
    while (i < 11){ 
     ch = input.charAt(i); 
     int x = Character.getNumericValue(ch); 
     sumEven = x +sumEven; 
     i += 2; 
    } 

    return sumEven; 
} 

Antwort

0

charAt() verwendet nullbasierte Indizes, aber die Anweisung will, dass Sie 1-basierte Indizes verwenden. Also, in ungerade() beginnen mit i = 0. Und in gerade() beginnen mit i = 1.

Zweitens verwenden Sie Character.getNumericValue(ch), um den Unicode-Codepunkt-Wert des Zeichens zu erhalten, aber die Anweisungen bitten Sie, die verwenden Ziffernwert. Verwenden Sie stattdessen Integer.parseInt(ch.ToString()).

private static int odd(String input){ 
    int i = 0; 
    char ch; 
    int sumOdd = 0; 
    while (i < 11){ 
     ch = input.charAt(i); 
     int x = Integer.parseInt(ch.ToString()); 
     sumOdd = x +sumOdd; 
     i += 2; 
    } 
    int Mx3=sumOdd*3; 
    return Mx3; 
} 


private static int even(String input){ 
    int i = 1; 
    char ch; 
    int sumEven = 0; 
    while (i < 11){ 
     ch = input.charAt(i); 
     int x = Integer.parseInt(ch.ToString()); 
     sumEven = x +sumEven; 
     i += 2; 
    } 

    return sumEven; 
} 

-Code nicht getestet

+0

Dank das Problem war, ungerade und gerade. – Ryan