Преобразование из PHP в Java поможет: \ - PullRequest
0 голосов
/ 13 июня 2011
function get_ip($chat) //network.as:3817, network.as:197
{
        $ips = 4; //network.as:4053
        $servers = 4; //network.as:4054
        $sock = array("174.36.242.24", "174.36.242.25", "174.36.242.26", "174.36.242.27", "174.36.242.32", "174.36.242.33", "174.36.242.34", "174.36.242.35", "174.36.242.40", "174.36.242.41", "174.36.242.42", "174.36.242.43", "69.4.231.248", "69.4.231.249", "69.4.231.250", "69.4.231.251"); //network.as:4055
        $sock2 = array("208.43.218.80", "208.43.218.81", "208.43.218.82", "208.43.218.83", "174.36.56.200", "174.36.56.201", "174.36.56.202", "174.36.56.203", "174.36.4.144", "174.36.4.145", "174.36.4.146", "174.36.4.147", "174.36.56.184", "174.36.56.185", "174.36.56.186", "174.36.56.187"); //network.as:4056
        $SockStatus = array(400, 401, 402, 403, 410, 411, 412, 413, 420, 421, 422, 423, 430, 431, 432, 433);

        for($i=0;$i<$servers;$i++)
        {
                $array = array();
                for($j=0;$j<$ips;$j++)
                {
                        if($SockStatus[$i * $ips + $j] != 0)
                        {
                                $array[] = $sock[$i * $ips + $j];
                        }
                }
                if(sizeof($array) > 0)
                {
                        $ip[0][$i] = $array[rand(0, sizeof($array) - 1 )];
                }
                $ip[1][$i] = $sock2[4 * $i + rand(0,3)];
        }

        $inarray = $chat < 8 ? 3 : ($chat & 96) >> 5;

        return $ip[0][$inarray];
}

Я пытался преобразовать этот код, который выбирает IP "случайно" из массива для данного номера чата.

До сих пор я пытался сделать что-то подобное, но безуспешно. Кто-нибудь может помочь?

Плохой порт, который я сделал:

public static double xat_get_ip(double arg1){
            int ips = 4;
            int servers = 4;
            String Sock[] = {"174.36.242.24", "174.36.242.25", "174.36.242.26", "174.36.242.27", "174.36.242.32", "174.36.242.33", "174.36.242.34", "174.36.242.35", "174.36.242.40", "174.36.242.41", "174.36.242.42", "174.36.242.43", "69.4.231.248", "69.4.231.249", "69.4.231.250", "69.4.231.251"};
            String Sock2[] = {"208.43.218.80", "208.43.218.81", "208.43.218.82", "208.43.218.83", "174.36.56.200", "174.36.56.201", "174.36.56.202", "174.36.56.203", "174.36.4.144", "174.36.4.145", "174.36.4.146", "174.36.4.147", "174.36.56.184", "174.36.56.185", "174.36.56.186", "174.36.56.187"};
            int SockStatus[] = {400, 401, 402, 403, 410, 411, 412, 413, 420, 421, 422, 423, 430, 431, 432, 433};
            double ip[][];

            for (int i = 0; i < servers; i++) {
                ArrayList<String> array = new ArrayList<String>();
                for (int j = 0; j < ips; j++) {
                    if (SockStatus[i * ips + j] != 0) {
                        array.add(Sock[i * ips + j]);
                }
                if (array.size() > 0) {
                    double rn = new Random().nextInt() + 1;
                    ip[0][i] = array[Math.floor(Math.random() * array.size())];
                }
                double rn2 = new Random().nextInt(3) + 1;
                ip[1][i] = sock2[4 * i + rn2];
            }

            if (arg1 == 8) {
                int inarray = 0;
            } else{
            int inarray = arg1 < 8 ? 3 : arg1 & 96 >> 5;
            }

            return ip[0][inarray];

            }
    }

извините, что не ясно. :( Даже после изменения функций Rand для правильной работы и исправления пропущенных скобок в последних строках я все еще получаю эти ошибки. Мне кажется, я не могу заставить работать массивы. Мне нужно добавить в массив, который afaik требует ArrayList, но это дает мне пару ошибок.

C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:32: array required, but java.util.ArrayList<java.lang.String> found
                    ip[0][i].add(array[rand.nextInt(array.size())]);
                                      ^
C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:32: double cannot be dereferenced
                    ip[0][i].add(array[rand.nextInt(array.size())]);
                            ^
C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:35: cannot find symbol
symbol  : variable sock2
location: class connect
                ip[1][i] = sock2[4 * i + rn2];
                           ^
C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:35: possible loss of precision
found   : double
required: int
                ip[1][i] = sock2[4 * i + rn2];
                                       ^
C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:41: operator & cannot be applied to double,int
            int inarray = arg1 < 8 ? 3 : (arg1 & 96) >> 5;

                                               ^
C:\Program Files\Xinox Software\JCreatorV3 LE\MyProjects\Chronos\src\connect.java:44: cannot find symbol
symbol  : variable inarray
location: class connect
            return ip[0][inarray];
                         ^
6 errors

Process completed.

Обновлено в комментариях: S

1 Ответ

0 голосов
/ 13 июня 2011

Больше вещей:

  • При использовании ArrayList вы должны получить доступ к элементам с array.get(index), а не array[index].
  • Некоторые из ваших ошибок связаны с тем, что вы объявили Sock и используете, например, sock. Убедитесь, что случаи совпадают. Также соглашение о кодировании в Java должно начинать имена переменных со строчной буквы, так что придерживайтесь этого.

Старый

Похоже, что вы получаете случайные числа неправильно, я думаю, что вы хотите

Random rand = new Random();

В верхней части вашей функции, а затем используйте ее как:

ip[0][i] = array.get(rand.nextInt(array.size()));

и

ip[1][i] = sock[4 * i + rand.nextInt(4)];
...