Von Java zu PHP: java.util.Random und Co.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Von Java zu PHP: java.util.Random und Co.

    Hi,
    kann vielleicht jemand von euch neben PHP auch Java? Ich möchte nämlich eine Funktionen in PHP aus Java übersetzen, die einen String codiert, dafür muss ich eine weitere Funktion und zwei komplette Klassen übersetzen, glaube ich zu mindest. Habe dabei richtig üble Probleme, weshalb ich nun einfach mal drauf los poste:

    Java:
    Code:
      private int[] a(long paramLong, int paramInt)
      {
        int[] arrayOfInt = new int[paramInt];
        Random localRandom = new Random(paramLong);
        for (int i1 = 0; i1 < paramInt; ++i1)
          arrayOfInt[i1] = (int)(localRandom.nextDouble() * paramInt);
        return arrayOfInt;
      }
    
      private String jdMethod_if(long paramLong, String paramString)
      {
        int i1 = paramString.length();
        char[] arrayOfChar = new char[paramString.length()];
        int[] arrayOfInt = a(paramLong, i1);
        if (paramString.length() == 0)
          return "";
        paramString.getChars(0, paramString.length(), arrayOfChar, 0);
        int i2 = arrayOfChar[arrayOfInt[0]];
        for (int i3 = 0; i3 <= i1 - 2; ++i3)
          arrayOfChar[arrayOfInt[i3]] = arrayOfChar[arrayOfInt[(i3 + 1)]];
        arrayOfChar[arrayOfInt[(i1 - 1)]] = i2;
        return new String(arrayOfChar);
      }
    Und hier mein vollkommen verbuggter Ansatz:
    PHP-Code:
    <?php
    class jAtomic
    {
      var 
    $value;
      
      function 
    AtomicLong($initialValue)
      {
        
    $this->value $initialValue;
      }
      
      function 
    get()
      {
        return 
    $this->value;
      }
      
      function 
    set($newValue)
      {
        
    $this->value $newValue;
      }
      
      
    //Hier tuts schon richtig weh...
      
    function compareAndSet($expect$update)
      {
        echo(
    "e: $expect, u: $update\n");
        
        if(
    $expect == $update)
        {
          return 
    true;
        }
        else
        {
          
    $this->value $update;
          return 
    false;
        }
      }
    }

    class 
    jRandom
    {
      var 
    $serialVersionUID 3905348978240129619;
      var 
    $multiplier       0x5DEECE66D;
      var 
    $addend           0xB;
      var 
    $mask             null;
      
      function 
    Random($seed)
      {
        
    $this->seed = new jAtomic;
        
    $this->seed->AtomicLong(0);
        
    $this->setSeed($seed);
      }
      
      function 
    setSeed($seed)
      {
        
    $this->mask = (<< 48) - 1;
        
    $seed = ($seed $multiplier) & $this->mask;
        
        
    $this->seed->set($seed);
      }
      
      function 
    next($bits)
      {
        
    $this->mask = (<< 48) - 1;
        
        do
        {
          
    $oldseed  $this->seed->get();
          
    $nextseed = ($oldseed $this->multiplier $this->addend) & $this->mask;
        } while(!
    $this->seed->compareAndSet($oldseed$nextseed));
        
        return 
    $nextseed >> (48 $bits);
      }
      
      function 
    nextDouble()
      {
        return (
    $this->next(26) << 27) + $this->next(27);
      }
    }

    function 
    a($paramLong$paramInt)
    {
      
    $tInt null;
      
    $localRandom = new jRandom;
      
    $localRandom->Random($paramLong);
      
      for(
    $iL 0$iL $paramInt; ++$iL)
        
    $tInt[$iL] = ($localRandom->nextDouble() * $paramInt);
      
      return 
    $tInt;
    }

    function 
    jdMethod_if($paramLong$paramString)
    {
      
    $iL strlen($paramString);
      
    $tAoC null;
      
    $tAoI a($paramLong$iL);
      
      if(
    strlen($paramString) == 0)
        return 
    "";
      
      
    $tAoC $paramString;
      
    $i2 $tAoC[$tAoI[0]];
      
      for(
    $i3 0$i3 <= $iL 2; ++$i3)
        
    $tAoC[$tAoI[$i3]] = $tAoC[$tAoI[($i3 1)]];
      
      
    $tAoC[$tAoI[($iL 1)]] = $i2;
      
      return 
    $tAoC;
    }

    echo 
    jdMethod_if(1147"Dies ist ein Test!");
    ?>

  • #2
    Guck dir doch mal rand bzw. mt_rand an.

    Kommentar


    • #3
      Ich weiß leider nicht, was das Random Objekt in Java macht, aber grundsätzlich dürfte es doch kein Problem sein das umzuschreiben, weil PHP immer mehr zu Java tendiert! Extends und implements wirst du hier auch finden. Irgendwann gibt es gar keinen Unterschied mehr, aber bis Version 6 gibt es keine Typenüberprüfung bei primitiven Objekten!

      also kein "public int getInt(double something)"
      sondern lediglich "public function getInt($something)". Den Rest musst in die PHP Dokumentation schreiben!

      Und es wird dir hier keiner Dein Programm umschreiben, weil wenig Leute soviel Zeit haben, als dass sie hier ganze Programmrümpfe schreiben .

      Von daher finde den Fehler selbst und werde konkret!
      Welche Fehler spuckt PHP aus und was glaubst du ist der Fehler. Erklärungen zu Methoden findest du ALLE auf php.net ! Finde den Fehler selbst, dann lernst wenigstens was dabei .

      gruß Flip
      Find Parties?
      Partysuche

      Kommentar


      • #4
        Nimm den Java Decompiler dann siehst du was die Klasse macht

        Kommentar


        • #5
          Zur ersten Antwort: Ja, die Funktionen sind mir durchaus bekannt, aber ich dachte, wenn ich die Strings möglichst korrekt entschlüsseln lassen möchte, dann müsste mein Source dem des Java Applets schon sehr nahe kommen. Ich werde mich nun aber ausführlich mit srand() beschäftigen, danke.

          Zur zweiten Antwort: Zu nächst möchte ich sagen, dass ich von Java speziell auch gar keine Ahnung habe, weshalb mir das Ganze schwer fällt. Aber wie du nun darauf kommst, dass ich nicht wüsste, dass die Typisierung bei PHP dynamisch, implizit und schwach ist, verstehe ich nicht wirklich. Ich habe doch nirgenswo in meinem PHP Skript (denn PHP ist keine Programmiersprache, sondern eine Skriptsprache) einen Datentyp angegeben. Die Namen der Methoden kommen direkt aus dem Java Quelltext. Funktionen kann man aber bekanntlich so nennen, wie man möchte.

          Zur dritten Antwort: Irgendwie verstehe ich diese Antwort gar nicht. Ist es zwingend erforderlich, dass ich das Applet noch einmal durch einen Decompiler laufen lasse? Denn das einzige, mir bekannte Ziel der Benutzung eines Decompilers ist es doch, den Source Code wiedergespiegelt zu bekommen und der befindet sich doch bereits in meinem ersten Beitrag. Falls du über Javaverständnis verfügst und mich darauf hinweisen wolltest, dass der Teil der Klasse, den ich dort oben zitiert habe einen String nicht verschlüsselt, sondern etwas komplett anderes macht, dann bitte ich dich das explizit zu schreiben.

          Kommentar


          • #6
            Original geschrieben von Siggy

            Falls du über Javaverständnis verfügst und mich darauf hinweisen wolltest, dass der Teil der Klasse, den ich dort oben zitiert habe einen String nicht verschlüsselt, sondern etwas komplett anderes macht, dann bitte ich dich das explizit zu schreiben.
            Die Buchstabenplätze im String werden einfach durcheinander gebracht, mehr macht die beiden Funktionen nicht. Die eine Funktion erzeugt ein zufälliges Array mit ganzen Zahlen; die andere legt dieses Array zugrunde und mischt die Buchstaben im String.

            Kommentar

            Lädt...
            X