Question

Au cours des deux dernières semaines, je l'ai lu dans le livre codage de contrôle d'erreur: Principes fondamentaux et applications afin d'en apprendre davantage sur des codes BCH (Bose, Chaudhuri, Hocquenghem) pour un rôle de programmation junior dans une entreprise de télécommunications.

Ce livre couvre principalement les mathématiques et la théorie derrière le sujet, mais je me bats pour mettre en œuvre certains des concepts; surtout obtenir les n codewords.I ont une interface utilisateur graphique (mis en œuvre par NetBeans, donc je ne publierons pas le code que le fichier est énorme) qui passe un code pour obtenir le prochain n numéros:

La génération de ces chiffres est l'endroit où je rencontre des problèmes. Si je pouvais passer par tous ces en seulement la méthode de codage au lieu de bouclage en utilisant l'interface graphique ma vie serait dix fois plus facile.

Cela a été me rend fou depuis plusieurs jours car il est assez facile de générer 0000000000 à partir de l'entrée, mais je suis perdu à l'endroit où aller à partir de là avec mon code. Que dois-je faire alors pour générer le prochain numéro de travail?

Toute aide à générer le code ci-dessus serait apprécié.

Était-ce utile?

La solution

(grande édition ...) Jouer avec le code un peu plus cela semble fonctionner:

import java.util.ArrayList;
import java.util.List;


public class Main
{
    public static void main(final String[] argv)
    {
        final int startValue;
        final int iterations;
        final List<String> list;

        startValue = Integer.parseInt(argv[0]);
        iterations = Integer.parseInt(argv[1]);
        list = encodeAll(startValue, iterations);
        System.out.println(list);
    }

    private static List<String> encodeAll(final int startValue, final int iterations)
    {
        final List<String> allEncodings;

        allEncodings = new ArrayList<String>();

        for(int i = 0; i < iterations; i++)
        {
            try
            {
                final int    value;
                final String str;
                final String encoding;

                value = i + startValue;
                str = String.format("%06d", value);
                encoding = encoding(str);
                allEncodings.add(encoding);
            }
            catch(final BadNumberException ex)
            {
                // do nothing
            }
        }

        return allEncodings;
    }

    public static String encoding(String str)
        throws BadNumberException
    {
        final int[]         digit;
        final StringBuilder s;

        digit = new int[10];

        for(int i = 0; i < 6; i++)
        {
            digit[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
        }

        digit[6] = ((4*digit[0])+(10*digit[1])+(9*digit[2])+(2*digit[3])+(digit[4])+(7*digit[5])) % 11;
        digit[7] = ((7*digit[0])+(8*digit[1])+(7*digit[2])+(digit[3])+(9*digit[4])+(6*digit[5])) % 11;
        digit[8] = ((9*digit[0])+(digit[1])+(7*digit[2])+(8*digit[3])+(7*digit[4])+(7*digit[5])) % 11;
        digit[9] = ((digit[0])+(2*digit[1])+(9*digit[2])+(10*digit[3])+(4*digit[4])+(digit[5])) % 11;

        // Insert Parity Checking method (Vandermonde Matrix)
        s = new StringBuilder();

        for(int i = 0; i < 9; i++)
        {
            s.append(Integer.toString(digit[i]));
        }

        if(digit[6] == 10 || digit[7] == 10 || digit[8] == 10 || digit[9] == 10)
        {
            throw new BadNumberException(str);
        }

        return (s.toString());
    }
}

class BadNumberException
    extends Exception
{
    public BadNumberException(final String str)
    {
        super(str + " cannot be encoded");
    }
}

Je préfère jeter l'exception plutôt que de retourner une chaîne spéciale. Dans ce cas, j'ignore l'exception qui, normalement, je dirais est une mauvaise pratique, mais pour ce cas, je pense qu'il est ce que vous voulez.

Autres conseils

Difficile à dire, si je suis votre problème, mais après avoir lu votre question à plusieurs reprises, peut-être c'est ce que vous cherchez:

public List<String> encodeAll() {
  List<String> allEncodings = new ArrayList<String>();
  for (int i = 0; i < 1000000 ; i++) { 
    String encoding = encoding(Integer.toString(i));
    allEncodings.add(encoding);
  }
  return allEncodings;
}

Il y a une faille dans la solution, les résultats ne sont pas toOctalString 0 rembourré. Si c'est ce que vous voulez, je suggère d'utiliser String.format("<something>", i) dans l'appel d'encodage.

Mise à jour

Pour l'utiliser dans votre appel en cours, remplacer un appel à l'encodage (String str) avec appel à cette méthode. Vous recevrez une liste ordonnée avec tous les encodages.

J'aasumed, vous étiez seulement intéressé par les valeurs octal - mon erreur, maintenant, je pense que vous avez juste oublié l'encodage pour la valeur 000009 en vous par exemple et donc retiré la substance octal irretating

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top