0

私はプログラミングが初めてで、Java をまったく理解していません。以下は、Pascal では理解できない Java のコードです。

public static boolean verificaRS(String numeroRS)
{
    Integer numeroAbsoluto = Integer.valueOf(0);
    Integer resto = Integer.valueOf(0);

    Integer numero = Integer.valueOf(0);
    int numeroAuxiliar = 1000000000;
    int soma = 0;

    try
    {
        numero = Integer.valueOf(Integer.parseInt(numeroRS));
    }
    catch (Exception ex)
    {
       Log.escreveLog(ex.toString());
       return false;
    }

    if (numero.intValue() > 0)
    {
        for (int contador = 9; contador > 1; contador--)
        {
            numeroAuxiliar /= 10;
            resto = Integer.valueOf(numero.intValue() % numeroAuxiliar);
            numeroAbsoluto = Integer.valueOf(numero.intValue() / numeroAuxiliar);
            numero = Integer.valueOf(numero.intValue() - numeroAbsoluto.intValue() * numeroAuxiliar);
            soma += numeroAbsoluto.intValue() * contador;
        }

        if (soma % 11 == numero.intValue())
            return true;

        if ((soma % 11 == 10) && (numero.intValue() == 0))
        {
            return true;
        }

        return false;
    }

    return false;
}

翻訳を手伝ってくれる人はいますか?これまでのところ、これは私がやったことです:

NumeroAbsoluto, Resto, Numero, NumeroAuxiliar, Soma: Integer;
Contador: Integer;

begin
  numeroAuxiliar := 1000000000;
  Numero := 00009356332;

  for Contador := 9 downto 1 do
  begin
    NumeroAuxiliar := NumeroAuxiliar div 10;
    Resto := Numero mod NumeroAuxiliar;
    NumeroAbsoluto := Numero div NumeroAuxiliar;
    Numero := Numero - NumeroAbsoluto * NumeroAuxiliar;
    Soma := Soma + NumeroAbsoluto * Contador;
  end;

この場合の数値は 00009356332 です。しかし、最終的に結果は同じではありません。

4

2 に答える 2

0

次のようなものです (翻訳されたものを示すためにインターリーブされています)。これまでに示した翻訳の重要な問題は、元のコードの動作と一致させるfor contador :- 9 downto 1必要があるということです。downto 2

//public static boolean verificaRS(String numeroRS)
//{

function verificaRS( numeroRS: string ): boolean;

//    Integer numeroAbsoluto = Integer.valueOf(0);
//    Integer resto = Integer.valueOf(0);
//    Integer numero = Integer.valueOf(0);
//    int numeroAuxiliar = 1000000000;
//    int soma = 0;
var
    numeroAbsoluto: integer = 0;
    resto: integer = 0;
    numero: integer = 0;
    numeroAuxiliar: integer = 1000000000;
    soma: integer = 0;

//    try
//    {
//        numero = Integer.valueOf(Integer.parseInt(numeroRS));
//    }
//    catch (Exception ex)
//    {
//       Log.escreveLog(ex.toString());
//       return false;
//    }
begin
    try
        numero := StrToInt( numeroRS );
    except
        // This is basic; there is probably a smarter way to handle the exception
        Log.escreveLog( "StrToInt exception" );
        exit( false );
    end;

//    if (numero.intValue() > 0)
//    {

    if numero > 0 then
    begin
//        for (int contador = 9; contador > 1; contador--)
//        {
//            numeroAuxiliar /= 10;
//            resto = Integer.valueOf(numero.intValue() % numeroAuxiliar);
//            numeroAbsoluto = Integer.valueOf(numero.intValue() / numeroAuxiliar);
//            numero = Integer.valueOf(numero.intValue() - numeroAbsoluto.intValue() * numeroAuxiliar);
//            soma += numeroAbsoluto.intValue() * contador;
//        }

        for contador := 9 downto 2 do
        begin
            numeroAuxiliar := numeroAuxiliar div 10;
            resto := numero mod numeroAuxiliar;
            numeroAbsoluto := numero div numeroAuxiliar;
            numero := numero - numeroAbsoluto * numeroAuxiliar;
            soma := soma + numeroAsboluto * contador;
        end;

 //       if (soma % 11 == numero.intValue())
 //           return true;
 //
 //       if ((soma % 11 == 10) && (numero.intValue() == 0))
 //       {
 //           return true;
 //       }
 //
 //       return false;

        verificaRS := ((soma mod 11) = numero) or (((soma mod 11) = 10) and (numero = 0));
 //}
end;
于 2013-08-14T19:53:37.097 に答える
0

あなたのJavaコードは正しいですか?メソッドが true を返すときは? あなたの Java コードは非常に汚いと思います... mbrath からの答えは、Pascal へのクリーンな直接転写です。

于 2013-08-14T15:38:15.963 に答える