Pregunta

En el último par de semanas he leído el libro Control De Errores De Codificación:Fundamentos y Aplicaciones con el fin de aprender acerca de BCH (Bose, Chaudhuri, Hocquenghem) los Códigos para un junior de programación de papel en una empresa de telecomunicaciones.

Este libro cubre principalmente las matemáticas y la teoría detrás del sujeto, pero yo estoy luchando para aplicar algunos de los conceptos;principalmente obtener el siguiente n codewords.Tengo una interfaz gráfica de usuario (implementado a través de NetBeans, así que no voy a publicar el código como el archivo es enorme) que pases un código, con el fin de obtener la siguiente n números:

La generación de estos números es donde estoy teniendo problemas.Si yo pudiera ir a través de todos estos dentro de el método de codificación en lugar de bucle a través de la interfaz gráfica de usuario que mi vida iba a ser diez veces más fácil.

Este ha sido me vuelve loca desde hace unos días ya que es bastante fácil de generar 0000000000 de la entrada, pero estoy perdido en cuanto a dónde ir desde allí con mi código.¿Qué hacer para generar el siguiente número?

Cualquier ayuda con la generación del código anterior sería apreciada.

¿Fue útil?

Solución

(gran edición ...) Jugar con el código un poco más esto parece funcionar:

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");
    }
}

Yo prefiero lanzar la excepción en lugar de devolver una cadena especial. En este caso no hago caso de la excepción que normalmente yo diría que es una mala práctica, pero para este caso creo que es lo que desea.

Otros consejos

Difícil de decir, si tengo tu problema, pero después de leer tu pregunta varias veces, tal vez eso es lo que estás buscando:

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;
}

Hay un error en la solución, el toOctalString resultados no son 0-collar.Si eso es lo que quieres, te sugerimos que utilices String.format("<something>", i) en la codificación de la llamada.

Actualización

A utilizar en la presente convocatoria, sustituir una llamada de codificación(String str) con la llamada a este método.Usted recibirá una Lista ordenada con todas las codificaciones.

Yo aasumed, sólo estaban interesados en los valores octales - mi error, ahora yo creo que simplemente se olvidó de la codificación de valor 000009 en ejemplo y así se eliminó la irretating octal cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top