rastgele kod oluşturma

Dantero

Elmas Madencisi
Mesajlar
881
En iyi cevaplar
0
Beğeniler
514
Puanları
1,310
Ruh hali
3 tane rastgale harf konuluyor ve o For döngüsünün altında 3 indeksten birinin yerine sayı koyuluyor. Yani 2 karakter 1 sayı oluyor 3 karakter olan şey.
İyide 3 tane harf değil ki 2 tane konuluyor? Orda i2 = 0, i2<3, i2++ demişsiniz burda en fazla 2 olmazmı sayı? i2 <= 3 olması gerekmiyor mu?
 

Dantero

Elmas Madencisi
Mesajlar
881
En iyi cevaplar
0
Beğeniler
514
Puanları
1,310
Ruh hali
Şimdi hocam şöyle düşün bir enerji var ve bu enerji kodlara sıra sıra giriyor, ilk girerken i2 < 3 değişkenini kontrol ediyor ve sonrasında i2++ kodunu işliyor ve i2 1 oluyor yani ilk girdiğinde i2 1 oluyor. Yanlışmıyım ya? Yanlış anlamayın benim bildiğim bu. O zaman şimdi senin dediğinle yola çıkarsak ortadaki şart a i2 > 100 diyelim burada senin dediğine göre 0 ın 100 den küçük olmasına rağmen döngü yinede 1 kere çalışacaktır ve bu mantıksız olur. Yanlışmıyım?

Orada i2'nin ilk hali 0 unutmayın; Orada i2 sırayla 0,1,2 oluyor.
 

Nobody01

YASAKLANDI
Mesajlar
92
En iyi cevaplar
0
Beğeniler
171
Puanları
0
Şimdi hocam şöyle düşün bir enerji var ve bu enerji kodlara sıra sıra giriyor, ilk girerken i2 < 3 değişkenini kontrol ediyor ve sonrasında i2++ kodunu işliyor ve i2 1 oluyor yani ilk girdiğinde i2 1 oluyor. Yanlışmıyım ya? Yanlış anlamayın benim bildiğim bu. O zaman şimdi senin dediğinle yola çıkarsak ortadaki şart a i2 > 100 diyelim burada senin dediğine göre 0 ın 100 den küçük olmasına rağmen döngü yinede 1 kere çalışacaktır ve bu mantıksız olur. Yanlışmıyım?
İlk başta i2++ kodu işlenmiyor, ilkinden sonra işleniyor fakat kontrol her zaman yapılıyor. Eğer i2 = 0; i2 > 100; i2++ yaparsan ilk başta i2'nin 100'den büyük olmadığı kontrol edileceği için hiç çalışmayacaktır ve döngü direkt atlanacaktır.
 

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
3 hane pek kaliteli değil. Ayrıca ilk karakter rakam devamı harf ise. Harf-rakam karışık 5 hane daha ideal olur. Tabii 10*29*29 kombinasyon VIP için yetersiz bir sayı değil ama programlama öğretileri açısından güzel bir 10-11 hane yapabilirsin. Ve karışık. Bu da 10^(10) ihtimal verecektir. Daha güvenli olur. Ayrıca düşünsene şansına bir haneyi yanlış yazıyor ve başkasının kodunu kullanmış oluyor? Buyur sana basit bir sınıf. Değerleri değiştirerek istediğin gibi kodlar oluşturabilirsin. Ve buradaki CODES listesini kullanmana da gerek yok.

PHP:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
* CodeUtil.java
*
* CodeUtil
*
* @author Infert 7 Mar 2016 17:53:36
*
*/
public class CodeUtil
{
    /** Alfabe, kullanılmasını istediğin karakterler */
    private static final char[] ALPHABET = "0123456789ABCÇDEFGĞHIİĞJKLMNOÖPRSŞTUÜVYZ".toCharArray();

    /** Uzunluk, kodların uzunluğu */
    private static final int LENGHT = 10;

    /** Kodlar, oluşturulmuş kodlar (oluşturulunca ekleniyor, kullanılınca çıkarılıyor) */
    private static final List<String> CODES = new ArrayList<>();

    /*
     * "synchronized" anahtar kelimesi bu metodun iki ayrı işlem
     * tarafından aynı anda çağırıldığında sırayla çalıştırılmasını sağlar.
     */
    public static synchronized String genCode()
    {
        /*
         * StringBuilder sınıfı parça parça metin oluşturulmada kullanıyor.
         * Biz de karakter karakter metin (String) oluşturacağımız için
         * burada kullandık.
         */
        StringBuilder builder = new StringBuilder(LENGHT);
  
        /*
         * Random sınıfı rasgele sayı almada kullanılıyor.
         * Burada rasgele alfabeden karakter seçmek için kullandık.
         */
        Random random = new Random();
  
        // for döngüsü ile istediğimiz uzunlukta karakter seçip metine ekliyoruz.
        for (int i = 0; i < LENGHT; i++)

            builder.append(ALPHABET[random.nextInt(ALPHABET.length)]);
  
        // builder'dan toString() metodu ile metini alıyoruz.
        String code = builder.toString();
  
        // CODES'dan add(E) metodu ile kodu listemize ekliyoruz.
        CODES.add(code);
  
        // Kodu döndürüyoruz.
        return code;
    }

    /*
     * Bu metot koşul (boolean) değeri döndürüyor.
     * Eğer true dönerse kod onaylandı, eğer false dönerse kod onaylanmadı.
     * Yani kullanımı şöyle olabilir:
     *
     * --------------------------------------------------------------------
     * if (CodeUtil.useCode(code))
     * {
     *   player.getInventory().addItem(new ItemStack(Material.DIAMOND, 64));
     *   player.updateInventory();
     *   player.sendMessage("Elmasların hayırlı olsun!");
     * }
     *
     * else
     * {
     *   player.sendMessage("Geçersiz kod!");
     * }
     * --------------------------------------------------------------------
     *
     * Bunu komutla falan halledebilirsin.
     */
    public static synchronized boolean useCode(String code)
    {
        // Eğer code nesnesi null (tanımlanmamış) ise
        // kodu onaylamıyoruz ve false döndürüyoruz.
        // Metot bir şey döndürdükten sonra çalışmaya devam etmez.
        // Bunu unutmayın! ;)
        if (code == null) return false;
  
        // CODES'dan indexOf(Object) metodu ile verilen nesnenin
        // dizideki endeksini aldık. Eğer endeks -1 ise
        // bu nesne listede yok demektir. Yani geçersiz.
        int index = CODES.indexOf(code);

        // Eğer bu kod listede yoksa geçersiz. Yani false döndürmeliyiz.
        if (index < 0) return false;
  
        // Artık kodu geçersiz kılan bir şey yok. Bu nedenle listeden çıkarıp true döndürüyoruz.
        // CODES'dan remove(int) metodu ile code nesnesinin listede bulunduğu
        // endexteki nesneyi kaldırdık. Yani bu kodu listeneden kaldırdık.
        CODES.remove(index);
  
        // Kod uygundur. Bu nedenle true döndürüyoruz.
        return true;
    }

    /*
     * Yapıcı (constructor) metotlar nesne oluşturmak için kullanılır.
     * bknz: "CodeUtil nesne = new CodeUtil();"
     * Biz CodeUtil sınıfından bir nesne oluşturulmasını istemiyoruz.
     * Bu nedenle yapıcı metoda private anahtar kelimesini yazıyoruz.
     * Yalnızca bu dosya içerisinden çağırılabilir oluyor.
     * Ve zaten biz bu dosyada onu kullanmadık.
     * Bu nedenle CodeUtil nesnesi oluşturulmayacaktır.
     */
    private CodeUtil()
    {}
}

String randomkod = "";
Random kod = new Random();
kod.nextInt(3);
randomkod += kod;
kod.nextString(2);
randomkod += kod;
System.out.println("Kodunuz: " + randomkod);


Emin değilim nextString bölümü çalışmayabilir..
Bunun neresi çalışır ki? :D
 

Nobody01

YASAKLANDI
Mesajlar
92
En iyi cevaplar
0
Beğeniler
171
Puanları
0
3 hane pek kaliteli değil. Ayrıca ilk karakter rakam devamı harf ise. Harf-rakam karışık 5 hane daha ideal olur. Tabii 10*29*29 kombinasyon VIP için yetersiz bir sayı değil ama programlama öğretileri açısından güzel bir 10-11 hane yapabilirsin. Ve karışık. Bu da 10^(10) ihtimal verecektir. Daha güvenli olur. Ayrıca düşünsene şansına bir haneyi yanlış yazıyor ve başkasının kodunu kullanmış oluyor? Buyur sana basit bir sınıf. Değerleri değiştirerek istediğin gibi kodlar oluşturabilirsin. Ve buradaki CODES listesini kullanmana da gerek yok.

PHP:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
* CodeUtil.java
*
* CodeUtil
*
* @author Infert 7 Mar 2016 17:53:36
*
*/
public class CodeUtil
{
    /** Alfabe, kullanılmasını istediğin karakterler */
    private static final char[] ALPHABET = "0123456789ABCÇDEFGĞHIİĞJKLMNOÖPRSŞTUÜVYZ".toCharArray();

    /** Uzunluk, kodların uzunluğu */
    private static final int LENGHT = 10;

    /** Kodlar, oluşturulmuş kodlar (oluşturulunca ekleniyor, kullanılınca çıkarılıyor) */
    private static final List<String> CODES = new ArrayList<>();

    /*
     * "synchronized" anahtar kelimesi bu metodun iki ayrı işlem
     * tarafından aynı anda çağırıldığında sırayla çalıştırılmasını sağlar.
     */
    public static synchronized String genCode()
    {
        /*
         * StringBuilder sınıfı parça parça metin oluşturulmada kullanıyor.
         * Biz de karakter karakter metin (String) oluşturacağımız için
         * burada kullandık.
         */
        StringBuilder builder = new StringBuilder(LENGHT);

        /*
         * Random sınıfı rasgele sayı almada kullanılıyor.
         * Burada rasgele alfabeden karakter seçmek için kullandık.
         */
        Random random = new Random();

        // for döngüsü ile istediğimiz uzunlukta karakter seçip metine ekliyoruz.
        for (int i = 0; i < LENGHT; i++)

            builder.append(ALPHABET[random.nextInt(ALPHABET.length)]);

        // builder'dan toString() metodu ile metini alıyoruz.
        String code = builder.toString();

        // CODES'dan add(E) metodu ile kodu listemize ekliyoruz.
        CODES.add(code);

        // Kodu döndürüyoruz.
        return code;
    }

    /*
     * Bu metot koşul (boolean) değeri döndürüyor.
     * Eğer true dönerse kod onaylandı, eğer false dönerse kod onaylanmadı.
     * Yani kullanımı şöyle olabilir:
     *
     * --------------------------------------------------------------------
     * if (CodeUtil.useCode(code))
     * {
     *   player.getInventory().addItem(new ItemStack(Material.DIAMOND, 64));
     *   player.updateInventory();
     *   player.sendMessage("Elmasların hayırlı olsun!");
     * }
     *
     * else
     * {
     *   player.sendMessage("Geçersiz kod!");
     * }
     * --------------------------------------------------------------------
     *
     * Bunu komutla falan halledebilirsin.
     */
    public static synchronized boolean useCode(String code)
    {
        // Eğer code nesnesi null (tanımlanmamış) ise
        // kodu onaylamıyoruz ve false döndürüyoruz.
        // Metot bir şey döndürdükten sonra çalışmaya devam etmez.
        // Bunu unutmayın! ;)
        if (code == null) return false;

        // CODES'dan indexOf(Object) metodu ile verilen nesnenin
        // dizideki endeksini aldık. Eğer endeks -1 ise
        // bu nesne listede yok demektir. Yani geçersiz.
        int index = CODES.indexOf(code);

        // Eğer bu kod listede yoksa geçersiz. Yani false döndürmeliyiz.
        if (index < 0) return false;

        // Artık kodu geçersiz kılan bir şey yok. Bu nedenle listeden çıkarıp true döndürüyoruz.
        // CODES'dan remove(int) metodu ile code nesnesinin listede bulunduğu
        // endexteki nesneyi kaldırdık. Yani bu kodu listeneden kaldırdık.
        CODES.remove(index);

        // Kod uygundur. Bu nedenle true döndürüyoruz.
        return true;
    }

    /*
     * Yapıcı (constructor) metotlar nesne oluşturmak için kullanılır.
     * bknz: "CodeUtil nesne = new CodeUtil();"
     * Biz CodeUtil sınıfından bir nesne oluşturulmasını istemiyoruz.
     * Bu nedenle yapıcı metoda private anahtar kelimesini yazıyoruz.
     * Yalnızca bu dosya içerisinden çağırılabilir oluyor.
     * Ve zaten biz bu dosyada onu kullanmadık.
     * Bu nedenle CodeUtil nesnesi oluşturulmayacaktır.
     */
    private CodeUtil()
    {}
}


Bunun neresi çalışır ki? :D
O kadar liste yapmışsın kodları saklamak için ama yeni bir kod oluştururken aynısının denk gelme ihtimalinde bir tane kontrol yapmamışsın, böyle basit bir iş için bu String Builder kullanımını da gereksiz buluyorum, kütüphanesiz yapabileceğiniz bir iş için kütüphane kullanmak sadece işi uzatır. Yeni bir kod oluştururken de "synchronized" kullanman gereksiz zira herhangi bir kontrol yok, herhangi bir çakışma olacak bir kod da yok.
 
Son düzenleme:

Dpelqpleq

2 + 2 = 5
Mesajlar
1,037
En iyi cevaplar
0
Beğeniler
1,201
Puanları
0
yaw arkadaşlar bu java savaşı nedir tmm çok biliyonuzda sorun çözüldü ayrıca tek kullanımlık yaptım yani bu kadar kasmayın :D
Ne savasından bahsediyorsun sen savasla javayı karıstırmıssın!
Atalarımız ne demis, savasmayın sevisin. Demek ki bildikleri var. Gelin hadi :lol:
 

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
O kadar liste yapmışsın kodları saklamak için ama yeni bir kod oluştururken aynısının denk gelme ihtimalinde bir tane kontrol yapmamışsın, böyle basit bir iş için bu String Builder kullanımını da gereksiz buluyorum, kütüphanesiz yapabileceğiniz bir iş için kütüphane kullanmak sadece işi uzatır. Yeni bir kod oluştururken de "synchronized" kullanman gereksiz zira herhangi bir kontrol yok, herhangi bir çakışma olacak bir kod da yok.
Her bir karakter için yeni bir Random nesnesi oluşturmuşsun ayrıca Java'nın bütün olayı kütüphane Random da JRE'de String de, lütfen. Synchronized kullanmak tabii ki de gereksiz değil. Thread safe. Herhangi bir kontrol yok ne anlamda yazıldı anlamadım. Eğer iki işlemden metodu aynı anda çağırırsan listede hata çıkabilir. Metodun nereden kullanılacağı belli değil belki dinleyicilerde belki işlemlerde. Hata riskini göze alacağıma direkt iki kelime fazla kod yazarım. Eğer eklentinin yazarı bu çakışmanın olmayacağını düşünüyorsa kaldırabilir, performans düşüşü yapar. Ayrıca 10 haneli bir kodun aynı olma olasılığı %10^(-8). Biz buna imkansız diyoruz.
 

Nobody01

YASAKLANDI
Mesajlar
92
En iyi cevaplar
0
Beğeniler
171
Puanları
0
Her bir karakter için yeni bir Random nesnesi oluşturmuşsun ayrıca Java'nın bütün olayı kütüphane Random da JRE'de String de, lütfen. Synchronized kullanmak tabii ki de gereksiz değil. Thread safe. Herhangi bir kontrol yok ne anlamda yazıldı anlamadım. Eğer iki işlemden metodu aynı anda çağırırsan listede hata çıkabilir. Metodun nereden kullanılacağı belli değil belki dinleyicilerde belki işlemlerde. Hata riskini göze alacağıma direkt iki kelime fazla kod yazarım. Eğer eklentinin yazarı bu çakışmanın olmayacağını düşünüyorsa kaldırabilir, performans düşüşü yapar. Ayrıca 10 haneli bir kodun aynı olma olasılığı %10^(-8). Biz buna imkansız diyoruz.
Listeye obje eklerken kullandığınız fonksiyonun zaten synchronized olduğunu biliyor muydunuz? Listeye aynı anda bir şey eklemek çakışmaya sebep olmaz, aksine performans artışı yaşanacaktır. Yazdığınız kodun Multi-Threading ile hiç alakası yoktur ki "Thread Safe" çok ayrı bir konudur, Random oluşturmak String Builder oluşturmaktan çok farklı değildir. Java'nın bütün olayı elbet kütüphane olabilir lakin sadece String sınıfı ile yapılabilecek bir iş için StringBuilder kullanmak eminim buna girmez. Tabi, tek bir Random objesi açılarak da aynı iş halledilebilir, benim üşengeçliğim.
 

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
Listeye obje eklerken kullandığınız fonksiyonun zaten synchronized olduğunu biliyor muydunuz? Listeye aynı anda bir şey eklemek çakışmaya sebep olmaz, aksine performans artışı yaşanacaktır. Yazdığınız kodun Multi-Threading ile hiç alakası yoktur ki "Thread Safe" çok ayrı bir konudur, Random oluşturmak String Builder oluşturmaktan çok farklı değildir. Java'nın bütün olayı elbet kütüphane olabilir lakin sadece String sınıfı ile yapılabilecek bir iş için StringBuilder kullanmak eminim buna girmez. Tabi, tek bir Random objesi açılarak da aynı iş halledilebilir, benim üşengeçliğim.
Kendi yazdığını okuyor musun?
 

Nobody01

YASAKLANDI
Mesajlar
92
En iyi cevaplar
0
Beğeniler
171
Puanları
0
Kendi yazdığını okuyor musun?
Ya siz anlamadınız, ya ben anlatamadım tabi; uzun konulu şeyleri kısa yorumlara sığdırmaya çalışmak zor, benim hatam.

PHP:
public static void main(String[] args) {
  doFunction();
  doFunction();
}

private void doFunction() {
  System.out.println("Hello World!");
}

Burada "doFunction" methodu aynı anda çağrılmaz, bunu bildiğinizi varsayıyorum. Bu iki defa "Hello World!" yazdıracaktır, siz bunun için bir "Task" açar veyahut direk "Multi-Threading" yapıp doFunction methodunu aynı anda çağırırsanız bir hata almazsınız zira; çakışacak bir şey mevcut değil burada, buna "synchronized" kelimesini eklemek aynı anda çalıştırılırken sırayla çalışmasını sağlayacaktır ki aynı anda çalışsa dahi hata vermeyecek bir şey için buna gerek yok, sadece boşu boşuna methodu bekletmenize yarar. Şimdi aşağıdaki kodu inceleyelim.

PHP:
private static synchronized void registerBot(String input, String input2, String input3) throws Exception {
        URL url = new URL(input);
        Map<String, Object> params = new LinkedHashMap<String, Object>();
        String username = input2 + UUID.randomUUID().toString().replaceAll("-", "");
        String password = input3 + UUID.randomUUID().toString().replaceAll("-", "");
        String mail = username + "@gmail.com";

        params.put("kadi", username);
        params.put("sifre", password);
        params.put("email", mail);
        params.put("kayitol", "kayitol");

        StringBuilder postData = new StringBuilder();
        for (Map.Entry<String, Object> param : params.entrySet()) {
            if (postData.length() != 0) postData.append('&');
            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }

        byte[] postDataBytes = postData.toString().getBytes("UTF-8");

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

        for (int c; (c = in.read()) >= 0; ) ;

        System.out.println(username + " : " + password);
    }

Siz eğer bunu "synchronized" yapmadan aynı anda değil, aynı saniyede çağırırsanız işte o zaman hata alırsınız. Burada yapılan işlem anlık değildir, kendi içinde Thread'leri mevcuttur kullanılan fonksiyonların. Aynı şekilde şu kod;

PHP:
private static int i = 5;

public static boolean doFunction() {
  if (i >= 5) {
    i = i - 5;

    return true;
  } else {
    return false;
  }
}

Eğer buradaki "doFunction" methodu bir Task veyahut Multi-Threading aracılığı ile eğer ki aynı anda çağırılırsa işte o zaman iki tane çağrılan methoda da olmaması gereken bir şekilde "true" döndürülecektir. İşte burada girer "synchronized" olaya. Sizin yazdığınız fonksiyona bakacak olursak.

PHP:
public static synchronized String genCode()
    {
        StringBuilder builder = new StringBuilder(LENGHT);
        Random random = new Random();

        for (int i = 0; i < LENGHT; i++)
            builder.append(ALPHABET[random.nextInt(ALPHABET.length)]);

        String code = builder.toString();

        [B]CODES.add(code);[/B]

        return code;
    }

Hayır, burada hiçbir çakışma olma ihtimali yok. Sizin çakışır diye düşündüğünüz şey muhtemelen kalın yaptığım yer. Eğer aynı anda çağrılırsa CODES'in güncellenmemiş olma ihtimalinden, öyle bir ihtimal mevcut değil. Ha bu arada benim en sonda yazdığım şey ise şu kodu şuna çevirmekti.

PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";

for (int i = 0; i < 3; i++) {
    randomString += String.valueOf(alphabet.charAt((new Random()).nextInt(alphabet.length())));
}

randomString = randomString.replace(String.valueOf(randomString.charAt((new Random()).nextInt(3))), String.valueOf((new Random()).nextInt(10))).toUpperCase();

System.out.println(randomString);


PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";
Random random = new Random();

for (int i = 0; i < 3; i++) {
    randomString += String.valueOf(alphabet.charAt(random.nextInt(alphabet.length())));
}

randomString = randomString.replace(String.valueOf(randomString.charAt(random.nextInt(3))), String.valueOf(random.nextInt(10))).toUpperCase();

System.out.println(randomString);

Bu arada dediğiniz şey elbet imkansız değil, bir şey kodlarken olabilecek her şeyi göz önünde bulundurmanızda fayda var. Maksat yapılan işlem belli uzunlukta rastgele sayı ve karakterlerden oluşan bir kod oluşturmaksa daha kolayı ve pratiği var, iyi forumlar
PHP:
String randomString = UUID.randomUUID().replaceAll("-", "").substring(0, 9);
 
Son düzenleme:

Centeglassered

Kızıltaş Madencisi
Mesajlar
579
En iyi cevaplar
0
Beğeniler
268
Puanları
900
Ruh hali
Ya siz anlamadınız, ya ben anlatamadım tabi; uzun konulu şeyleri kısa yorumlara sığdırmaya çalışmak zor, benim hatam.

PHP:
public static void main(String[] args) {
  doFunction();
  doFunction();
}

private void doFunction() {
  System.out.println("Hello World!");
}

Burada "doFunction" methodu aynı anda çağrılmaz, bunu bildiğinizi varsayıyorum. Bu iki defa "Hello World!" yazdıracaktır, siz bunun için bir "Task" açar veyahut direk "Multi-Threading" yapıp doFunction methodunu aynı anda çağırırsanız bir hata almazsınız zira; çakışacak bir şey mevcut değil burada, buna "synchronized" kelimesini eklemek aynı anda çalıştırılırken sırayla çalışmasını sağlayacaktır ki aynı anda çalışsa dahi hata vermeyecek bir şey için buna gerek yok, sadece boşu boşuna methodu bekletmenize yarar. Şimdi aşağıdaki kodu inceleyelim.

PHP:
private static synchronized void registerBot(String input, String input2, String input3) throws Exception {
        URL url = new URL(input);
        Map<String, Object> params = new LinkedHashMap<String, Object>();
        String username = input2 + UUID.randomUUID().toString().replaceAll("-", "");
        String password = input3 + UUID.randomUUID().toString().replaceAll("-", "");
        String mail = username + "@gmail.com";

        params.put("kadi", username);
        params.put("sifre", password);
        params.put("email", mail);
        params.put("kayitol", "kayitol");

        StringBuilder postData = new StringBuilder();
        for (Map.Entry<String, Object> param : params.entrySet()) {
            if (postData.length() != 0) postData.append('&');
            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }

        byte[] postDataBytes = postData.toString().getBytes("UTF-8");

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

        for (int c; (c = in.read()) >= 0; ) ;

        System.out.println(username + " : " + password);
    }

Siz eğer bunu "synchronized" yapmadan aynı anda değil, aynı saniyede çağırırsanız işte o zaman hata alırsınız. Burada yapılan işlem anlık değildir, kendi içinde Thread'leri mevcuttur kullanılan fonksiyonların. Aynı şekilde şu kod;

PHP:
private static int i = 5;

public static boolean doFunction() {
  if (i >= 5) {
    i = i - 5;

    return true;
  } else {
    return false;
  }
}

Eğer buradaki "doFunction" methodu bir Task veyahut Multi-Threading aracılığı ile eğer ki aynı anda çağırılırsa işte o zaman iki tane çağrılan methoda da olmaması gereken bir şekilde "true" döndürülecektir. İşte burada girer "synchronized" olaya. Sizin yazdığınız fonksiyona bakacak olursak.

PHP:
public static synchronized String genCode()
    {
        StringBuilder builder = new StringBuilder(LENGHT);
        Random random = new Random();

        for (int i = 0; i < LENGHT; i++)
            builder.append(ALPHABET[random.nextInt(ALPHABET.length)]);

        String code = builder.toString();

        [B]CODES.add(code);[/B]

        return code;
    }

Hayır, burada hiçbir çakışma olma ihtimali yok. Sizin çakışır diye düşündüğünüz şey muhtemelen kalın yaptığım yer. Eğer aynı anda çağrılırsa CODES'in güncellenmemiş olma ihtimalinden, öyle bir ihtimal mevcut değil. Ha bu arada benim en sonda yazdığım şey ise şu kodu şuna çevirmekti.

PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";

for (int i = 0; i < 3; i++) {
    randomString += String.valueOf(alphabet.charAt((new Random()).nextInt(alphabet.length())));
}

randomString = randomString.replace(String.valueOf(randomString.charAt((new Random()).nextInt(3))), String.valueOf((new Random()).nextInt(10))).toUpperCase();

System.out.println(randomString);


PHP:
String alphabet = "abcdefghıjklmnoprstuvyzxw";
String randomString = "";
Random random = new Random();

for (int i = 0; i < 3; i++) {
    randomString += String.valueOf(alphabet.charAt(random.nextInt(alphabet.length())));
}

randomString = randomString.replace(String.valueOf(randomString.charAt(random.nextInt(3))), String.valueOf(random.nextInt(10))).toUpperCase();

System.out.println(randomString);

Bu arada dediğiniz şey elbet imkansız değil, bir şey kodlarken olabilecek her şeyi göz önünde bulundurmanızda fayda var. Maksat yapılan işlem belli uzunlukta rastgele sayı ve karakterlerden oluşan bir kod oluşturmaksa daha kolayı ve pratiği var, iyi forumlar
PHP:
String randomString = UUID.randomUUID().replaceAll("-", "").substring(0, 9);
İlk olarak bu son mesajım bir daha cevap vermeyeceğim. İkinci olarak amacım basit bir kod üretme algoritması yazmak değil. Konu hakkında fikir vermek. Ve ArrayList kullanırken ayrı işlemlerin oluşturabileceği bir hata da bunun içerisinde. Üçüncü olarak bana siz diye hitap etmezsen daha iyi olur. Bana aptalca gelen bir şeydir. Dördüncü olarak her karakter için yeni bir nesne oluşturmak ile her kelime için yeni nesne oluşturmak karşılaştırılamaz.
 

Nobody01

YASAKLANDI
Mesajlar
92
En iyi cevaplar
0
Beğeniler
171
Puanları
0
İlk olarak bu son mesajım bir daha cevap vermeyeceğim. İkinci olarak amacım basit bir kod üretme algoritması yazmak değil. Konu hakkında fikir vermek. Ve ArrayList kullanırken ayrı işlemlerin oluşturabileceği bir hata da bunun içerisinde. Üçüncü olarak bana siz diye hitap etmezsen daha iyi olur. Bana aptalca gelen bir şeydir. Dördüncü olarak her karakter için yeni bir nesne oluşturmak ile her kelime için yeni nesne oluşturmak karşılaştırılamaz.
En son verdiğim örnekte gördüğün gibi her karakter için yeni bir nesne oluşturulmuyor. Eğer ArrayList kullanırken aynı işlemlerin oluşturabileceği bir hata olsaydı tüm methodlarımıza "synchronized" koyardık. Koyardık diyorum zira bunu ilk defa senden duyuyorum ve daha önce GitHub olsun, yabancı bir forum olsun böyle bir şey görmedim. Siz diye hitap etmemizin sebebi kullandığımız dil olan "Türkçe"de tek anlamının çoğul yapmak olmaması ve aynı şekilde saygı belirtisi için kullanılması, size göre ne kadar aptallıktır bilemem lakin ben Türkçe konuşuyorum. İyi forumlar.
 

Üst