lostyazilim
tr.link

Kaç sayı üretildiğini bulmak [JAVA]

5 Mesajlar 993 Okunma
lstbozum
tr.link

Umur09 Umur09 :/ Kullanıcı
  • Üyelik 31.05.2016
  • Yaş/Cinsiyet 29 / E
  • Meslek dev.
  • Konum İstanbul Anadolu
  • Ad Soyad U** A**
  • Mesajlar 131
  • Beğeniler 21 / 55
  • Ticaret 1, (%100)
public static void main(String[] args) {
int adet, aralik,sayac=0;
Scanner oku = new Scanner(System.in);
System.out.println("Kaç adet sayı üretilecek?");
adet = oku.nextInt();
System.out.println("Sayı aralığı ne olacak?");
aralik = oku.nextInt();

int[] diziAdet = new int[adet];

for(int i = 0; i diziAdet[i] = 0;
diziAdet[i] = (int) (Math.random() * aralik +1);
for(int j = 0; j < diziAdet.length; j++){
if(diziAdet[i] == diziAdet[j]){
sayac++;
}
}
System.out.println("Sayı : " + diziAdet[i] + " Tekrar:" + sayac);
sayac = 0;

}
}


arkadaşlar bu programda rastgele 10 kere belirlediğimiz sayı aralığında sayı üretiyoruz. Amacım ise her sayıdan kaç kere üretildiğini bulmak fakat bu şekilde yaptığımda her sayıyı teker teker yazıyor. Örneğin;

Sayı : 1 Tekrar : 1
Sayı : 1 Tekrar : 2
Sayı : 2 Tekrar : 1
Sayı : 1 Tekrar : 3
Sayı : 2 Tekrar :2

gibi. Benim istediğim ise;

Sayı : 1 Tekrar : 3
Sayı : 2 Tekrar : 2.

İlla java dilinde cevaplamanıza gerek yok. Temel mantığı söylerseniz yeterli benim için. Çok teşekkür ederim şimdiden.
 

 

wmaraci
reklam

JellyBeen JellyBeen Sms Onayı Gerekli Telefon Onaysız
  • Üyelik 04.02.2016
  • Yaş/Cinsiyet 34 / E
  • Meslek Ögrenci Php/Vb.net/C#
  • Konum Adana
  • Ad Soyad K** A**
  • Mesajlar 103
  • Beğeniler 6 / 12
  • Ticaret 4, (%50)
ben bilmiyorum kardeşim bak 14 kişi bakmış bir Allah ın kulu yazmıyor bu forum önceden böyle degildi
 

 

KadirCeyhan KadirCeyhan WM Aracı Kullanıcı
  • Üyelik 23.10.2016
  • Yaş/Cinsiyet 27 / E
  • Meslek Öğrenci
  • Konum Denizli
  • Ad Soyad K** C**
  • Mesajlar 689
  • Beğeniler 0 / 203
  • Ticaret 6, (%100)
Aslında şeyde yapabilirsin. Her bir j'nin sayacını ayrı tutup, writeln ile Sayı ve Sayac'ı birbiriyle bağlantılı olarak yazdırabilirsin.
 

 

ozgurgezen ozgurgezen WM Aracı Kullanıcı
  • Üyelik 17.03.2016
  • Yaş/Cinsiyet 43 / E
  • Meslek Bilgisayar Muhendisi
  • Konum İstanbul Anadolu
  • Ad Soyad Ö** H**
  • Mesajlar 702
  • Beğeniler 224 / 225
  • Ticaret 16, (%100)
Merhaba,
Kodda bircok yanlis bulunuyor adim adim gidelim.

Umur09 mesajlari edit leyerek devam edelim.

10 kere belirlediğimiz sayı aralığında sayı üretiyoruz. Bu 10 uretilene kadar sayi sayaclari belli olmayacagi icin asagidaki gibi bir array a daha ihtiyacin var.
int[] sayilariSay = new int[adet];

Arka arkaya 2 atama yapmissin. Ilk atamaya gerek yok. asagidaki 1. satir.
diziAdet[i] = 0;
diziAdet[i] = (int) (Math.random() * aralik +1);

Asagidaki blogu for icinden cikar.

for(int j = 0; j < diziAdet.length; j++){
if(diziAdet[i] == diziAdet[j]){
sayac++;
}
}
System.out.println("Sayı : " + diziAdet[i] + " Tekrar:" + sayac);
sayac = 0;

Asagidaki sekilde yeni olusturulan sayilarin sayisini 1 artir.
diziAdet[i] = (int) (Math.random() * aralik +1); // ornegin 5 olusturuldu.
sayilariSay[diziAdet[i]]++; // sayilarisay arrayinda 5 sayacini 1 artir.

En son olarak da ekrana basmak icin

for(int i = 0; iSystem.out.println("Sayı : " +i + " Tekrar:" + sayilariSay[i]);

// ekrana bas.
}

java icin birsey diyemecegim ama C de her olusturulan array in gosterdigi pointer dan itibaren alloc edilen hafiza kadar block 0 lanmali. yukardaki sayac arrayi icin gerekli. Best practices icin her array olusturuldugunda tabiri caizse temizlenmeli eger bu tur isler icin kullanilacaksa. sayac icin gerekli ama diziadet icin gerekli degil.

Birden fazla yol bulunuyor ama en okunabilir kod olmasi acisindan bu sekilde yazdim. Umarim yardimci olur.




public static void main(String[] args) {
int adet, aralik,sayac=0;
Scanner oku = new Scanner(System.in);
System.out.println("Kaç adet sayı üretilecek?");
adet = oku.nextInt();
System.out.println("Sayı aralığı ne olacak?");
aralik = oku.nextInt();

int[] diziAdet = new int[adet];
int[] sayilariSay = new int[adet];

// buradaki sayilarisayi 0 layan for lazim

for(int i = 0; i diziAdet[i] = (int) (Math.random() * aralik +1);

sayilariSay[diziAdet[i]]++;


}

for(int i = 0; iSystem.out.println("Sayı : " +i + " Tekrar:" + sayilariSay[i]);

// ekrana bas.
}

}

Benim kodda da hata var. uretilen sayi sayisi ile ust limit esit degilmis, simdi farkettim. en iyisi 2 boyutlu array ile yapmak, 2 boyutlu array biliyor musun? veya max aralik array boyutu kadar olmali. Eger max aralik sayi arrayi kadar olacak ise, yukaradaki kod calisacaktir ama sayilariSay boyutu +1 uzun olmali.
Umur09

kişi bu mesajı beğendi.

wmaraci
wmaraci

Umur09 Umur09 :/ Kullanıcı
  • Üyelik 31.05.2016
  • Yaş/Cinsiyet 29 / E
  • Meslek dev.
  • Konum İstanbul Anadolu
  • Ad Soyad U** A**
  • Mesajlar 131
  • Beğeniler 21 / 55
  • Ticaret 1, (%100)
Çözümü buldum.

import java.util.Scanner;

public class Odev4 {

public static void main(String[] args) {
int adet, aralik,sayac=0;
Scanner oku = new Scanner(System.in);
System.out.println("Kaç adet sayı üretilecek?");
adet = oku.nextInt();
System.out.println("Sayı aralığı ne olacak?");
aralik = oku.nextInt();

int[] diziAdet = new int[adet];

for(int i = 0; i diziAdet[i] = (int) (Math.random() * aralik);
}
for(int j = 0; j < diziAdet.length; j++){
for(int k = 0; k < diziAdet.length; k++){
if(diziAdet[j] == diziAdet[k]){
for(int l = 0; l < j; l++){
if(diziAdet[l] == diziAdet[j]) sayac = -1;
}
sayac++;
}
}
if(sayac!=0){
System.out.println("Sayı : " + diziAdet[j] + " Tekrar:" + sayac);
sayac = 0;
}

}
}
}



İç içe üç tane döngü kurarak ikinci döngünün girişinde seri elemanlarının birbirine eşit olup olmadığını kontrol ettim. Eğer eşitse üçüncü döngümü ilk döngümün bulunduğu yere kadar döndürerek, sayıların eşitliğini kontrol ettim. Eğer birbirlerine eşitse sayacımı -1 e eşitledim. (Bu da ekrana yazdırırken bulunan sayıları birden fazla yazdırmayı engellemek için.) Sonrasında ikinci döngümün içinde sayacımı arttırdım. Birinci döngümün içinde ise sayaç 0'a eşit değilse sayıları yazdırdım. ozgurgezen
 

 

wmaraci
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al