Çift ve Tek Sayıların Rastgele Sayı Üreticisi

0 ile 99 arasında 25 rastgele tam sayı üreten ve sonra bu tam sayıları iki ayrı satırda tek sayılar için ve bir çift sayılar için çıkaran bir uygulama oluşturmam gerekiyor. Çift sayılar için bir diziyi, tek sayılar için bir diziyi kullanmam gerekecek. Şu ana kadar sahip olduğum şey bu:

public static void main(String[] args) {

    //Odd Numbers
    int[] oddNums = new int[25];

    for (int index = 0; index < oddNums.length; index++) {
        oddNums[index] = (int) (Math.random()*99);
    }

    System.out.print("ODD: ");

    for (int index = 0; index < oddNums.length; index++) {
        System.out.print(oddNums[index] + " ");
    }

    //Even Numbers
    int[] evenNums = new int[25];

    for (int index = 0; index < evenNums.length; index++) {
        evenNums[index] = (int) (Math.random()*99);
    }

    System.out.print("\nEVEN: ");

    for (int index = 0; index < evenNums.length; index++) {
        System.out.print(evenNums[index] + " ");
    }

}

Programı 25 rastgele tamsayı yazdıracak şekilde ayarladım, ancak programın bir satırda sadece bile sayıları, diğerinde de tek sayıları yazdırmasını nasıl sağlayacağımı bilmiyorum (Java'da yeni yaşıyorum).

İşte alıyorum örnek bir çıktı:

ODD: 28 36 54 98 35 1 59 43 96 69 41 66 37 15 30 17 29 67 56 83 71 4   24 70 38
  EVEN: 34 45 36 26 73 84 60 39 21 49 28 98 69 14 32 24 72 29 26 88 77 2   23 58 47

Bu yanlıştır, çünkü her iki satırda da hem çift hem de tek sayılar vardır.

Çıktının neye benzemesi gerektiği:

ODD: 25 97 23 45 63 91 13 47 93 51 29
  EVEN: 22 94 46 74 18 48 32 84 28 92 56

Bir satırda sadece tek sayılar ve hatta başka bir satırda sayılar vardır.

Buraya ne eklemem gerektiğini bilen var mı?

2

6 cevap

Programınıza küçük bir değişiklik yapılması istenen sonucu verecektir.

public static void main(String[] args) {

    //Odd Numbers
    int[] randomNumbers = new int[25];
    int[] evenNumbers = new int[25];
    int[] oddNumbers = new int[25];
    int k = 0, l = 0;
    for (int index = 0; index < randomNumbers.length; index++) {
        randomNumbers[index] = (int) (Math.random() * 99);
    }
    for (int i = 0; i < 25; i++) {
        if (randomNumbers[i] % 2 == 0) {
            evenNumbers[k] = randomNumbers[i];
            k++;
        } else {
            oddNumbers[l] = randomNumbers[i];
            l++;
        }
    }
}
2
katma
Girintimi düzelttim.
katma yazar Coding Champ, kaynak
Düzgün ve tek sıralara eleman eklemek için kullanılırlar. Örneğin: -evenNumber [0], evenNumber [1]. garip sayılar için benzer şekilde.
katma yazar Coding Champ, kaynak
Üzgünüm, ama bunu tam olarak anlamadım. Neden yeni bir değişken yarattın int k = 0 ve int l = 0?
katma yazar Behroz Henayat, kaynak

Sadece 25 sayısını oluşturabilirsiniz. Bu girişleri oluşturduktan sonra, ait oldukları dizide onları bulabilirsiniz.

int num;
int oddIndex = -1;
int evenIndex = -1;
for (index = 0; index < 25 ; index++){
      num = (int) (Math.random()*99);
      if (num % 2 == 1){
         oddIndex++;
         oddNum[oddIndex] = num;             
      }
      else{
         evenIndex++;
         evenNum[evenIndex] = num;
      }
 }

Bu durumda, her dizinin boyutundan emin değilsiniz. Bu nedenle, dizi yerine ArrayList'i kullanmanızı öneririm. Bir ArrayList kullanıyorsanız, oddIndex ve evenIndex ile uğraşmanıza gerek kalmayacak.

1
katma

Java 8 akışlarını kullanan bir çözüm:

public class NumberGenerator {
    public static void main(String[] args) {
        Random random = new Random();
        int[] ints = random.ints(25, 0, 99).sorted().toArray();
        int[] even = IntStream.of(ints).filter(x -> x % 2 == 0).toArray();
        int[] odd = IntStream.of(ints).filter(x -> x % 2 == 1).toArray();
        System.out.println(Arrays.toString(even));
        System.out.println(Arrays.toString(odd));
    }
}

İlk önce tüm rastgele tam sayıların bir dizisi yaratılıyor. 25 rastgele tamsayı oluşturulur ve hepsi 0 ile 99 arasında olmalıdır.

Eşitler ve oranlar iki ayrı dizide filtrelenir.

[0, 4, 6, 16, 18, 22, 40, 42, 58, 64, 82, 84, 98]
[7, 27, 29, 31, 35, 55, 73, 75, 75, 79, 83, 91]
0
katma

Kodunuzun bir noktasında, şöyle bir şeye sahip olmanız gerekir:

pseudocode:

if (nextNumber is odd) then
   put nextNumber at end of ODD array
else
   put nextNumber at end of EVEN array
endif

Ayrıca, rastgele tamsayılar üretmek için tercih edilen util.Random.nextInt() 'a da göz atmanız gerekir.

0
katma
Ödevini kendin yaparsan daha çok şey öğreneceksin. Sadece ipucu vereceğim, aksi halde kodlama çalışmaları için saat başına 250 GBP tahsil ediyorum. Math.random() kullanmanız gerekiyorsa kullanın, ancak util.Random hakkında bilgi edinmek faydalı olacaktır. Kütüphaneleri öğrenmek için ihtiyacınız . Java'daki yeteneğin yattığı yer burasıdır.
katma yazar rossum, kaynak
Bunu tam olarak nereye eklemeliyim? Ayrıca, yalnızca Math.random() kullanmama izin verilir.
katma yazar Behroz Henayat, kaynak
Tamam, yardım için yine de teşekkürler. Yakın gelecekte util.Random hakkında daha fazla bilgi edinmeyi hatırlayacağım.
katma yazar Behroz Henayat, kaynak

Firstly,The random function you have written will be generating random numbers between 0 and 99. It will not be considering whether the numbers are odd or even.

Tek sayıların sayısı ve çift sayıların sayısı konusunda herhangi bir kısıtlama yoksa, rasgele oluşturucuyu bir kez kullanın; tek olup olmadığına ve hatta doğru diziye yerleştirmenize bağlı olarak kullanın.

Bunu yapmak için, MOD operatörünü kullanın, yani tek veya çiftini görmek için 2'ye böldükten sonra kalanı kontrol edin.

0
katma

[0,100] 'te rastgele eşit bir çift sayı oluşturabilirsiniz, burada x = [0, 49]' da düzgün rastgeledir.

Benzer şekilde, n = 2 * x + 1 ile tekdüze olarak rastgele bir tek sayı oluşturabilirsiniz, burada x [0,49] 'da tekdüze olarak rastgeledir.

0
katma