Frage

In den letzten paar Wochen habe ich durch das Buch lesen Error Control Coding: Grundlagen und Anwendungen um über BCH (Bose, Chaudhuri, Hocquenghem) Codes für eine Junior-Programmierung Rolle bei einem Telekommunikationsunternehmen zu erfahren.

Dieses Buch meist deckt die Mathematik und Theorie hinter dem Thema, aber ich bin zu kämpfen einige der Konzepte umzusetzen; in erster Linie immer die nächste n codewords.I eine GUI (über NetBeans umgesetzt, so dass ich den Code nicht gebucht werden, sobald die Datei sehr groß ist), die einen Code, um übergibt die nächsten zu bekommen n Zahlen:

, diese Zahlen zu erzeugen ist, wo ich Probleme habe. Wenn ich durch all diese innerhalb von nur den Codierverfahren statt Schleifen über die GUI mein Leben zehnmal wäre gehen könnte einfacher.

Das hat ich wahnsinnig für Tage jetzt, da es einfach genug von dem Eingang zu erzeugen 0000000000, aber ich bin verloren, wo mit meinem Code von dort aus zu gehen. Was muss ich dann tun, um die nächste Arbeitsnummer zu generieren?

Jede Hilfe mit dem obigen Code zu erzeugen würde geschätzt.

War es hilfreich?

Lösung

(big bearbeiten ...) Spiele mit dem Code ein bisschen mehr das scheint zu funktionieren:

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

Ich ziehe werfen eher die Ausnahme als eine spezielle Zeichenfolge zurück. In diesem Fall ignoriere ich die Ausnahme, die normalerweise würde ich sagen schlechte Praxis ist, aber für diesen Fall denke ich, es ist das, was Sie wollen.

Andere Tipps

Schwer zu sagen, wenn ich habe das Problem, aber nach Ihrer Frage mehrmals lesen, vielleicht ist das, was Sie suchen:

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

Es gibt einen Fehler in der Lösung sind die toOctalString Ergebnisse nicht 0-gepolstert. Wenn das, was Sie wollen, schlage ich vor String.format("<something>", i) bei der Codierung Anruf verwendet wird.

Aktualisieren

Um es in Ihrem aktuellen Anruf zu verwenden, um einen Anruf zu kodieren (String str) mit Aufruf dieser Methode zu ersetzen. Sie werden eine geordnete Liste mit allen Codierungen erhalten.

I aasumed, Sie waren nur in Oktalwerte interessiert - mein Fehler, jetzt denke ich, Sie haben nur vergessen, die Codierung für Wert 000009 in Ihnen Beispiel und damit die irretating Oktal Sachen entfernt

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top