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

你的 Java 代码正确吗?当你的方法返回 true 时?我认为你的 Java 代码很脏...... mbrath 的答案是直接转录到 Pascal。

于 2013-08-14T15:38:15.963 回答
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 回答