Turkcell | Geleceği Yazanlar

Java dizi işlemleri

Ben şimdi bir metni ilk önce paragraflar olarak, daha sonra bu paragrafları cümlelere ayırarak, daha sonra bu cümleleri kelimelerine ayıracağım, kelimeleride harflerine ayıracağım. 

Bunları daha sonra rastgele seçeceğim. Diyelim pragraf değiştir dedim pragrafların yerleri değişecek. Cümle değiştir dersem Paragraftaki cümlelerin yeri değişecek. Kelime değiştir dersem de bu cümlelerdeki kelimelerin yeri değişecek. 

Rastgele seçildiğinde aynı paragraf, cümle veya kelime tekrar gelmemeli.

Bunu java da nasıl yapabilirim sizce ? Paragraf kısmına kadar yapabildim. Açıkçası ama devamını getiremedim. Yardımcı olabilecek biri var mı ? 

 

Paragraf kodunu aşağıya bırakıyorum. Fikri olan ?

public void paragraf() {

		String line;
		line = textArea.getText();
		String dizi[] = line.split("\n\n");
		Random r = new Random();
		int[] randomtut = new int[dizi.length];
		int[] randomdizi = new int[dizi.length];

		for (int i = 0; i < dizi.length; i++) {
			randomtut[i] = 0;
			randomdizi[i] = i;
		}
		for (int i = 0; i < dizi.length; i++) {
			int randomsayi = r.nextInt(dizi.length);
			int count = 0, x = 0;
			if (randomtut[randomsayi] == 1) {
				while (true) {
					randomsayi = r.nextInt(dizi.length);
					if (randomtut[randomsayi] == 0) {
						randomtut[randomsayi] = 1;
						count++;
						break;
					}
				}
			} else {
				randomtut[randomsayi] = 1;
				count++;
			}
			sayi = randomdizi[randomsayi];

			if (x <= dizi.length) {

				metin += dizi[sayi] + "\n";
				x++;
			}
		}
	}

 

recepözen

Cum, 08/11/2019 - 14:33
Zaten yapmadığını söyledim. O birazda size kalmış tam nasıl bir karıştırma istiyorsanız paragrafList, cumleList, ve kelimeListen karıştırma işlemi yapabilirsiniz. Bu listelerin sizelerını kulanarak Random sınıfı ile rasgele sayı üretebilir ve üretilen sayıyı bir int listeye kayıt ederek sonra üreteceğiniz rasgele sayılara önceden ürettiniz mi diye kontrol edebilirsiniz. Son olarakta random sayıların bulunduğu intListesinin sırasına göre text hazırlaya bilirsiniz. Umarım anlatabilmişimdir.

    0

    Gürkan

    08 Kasım 2019

    Programı yaptım sayılır fakat karıştırma işlemi sırasında aklıma birşey takıldı. Cümlelerde, kelimelerde vb. yerlerde karıştırma işlemi yapıldıktan sonra tekrardan aynı metin karıştırılmış kelime veya cümlelerle yeniden oluşturulacak mı? Yoksa sadece gerekli veriler metinden ayıklanıp sadece karıştırılacak mı?

      ozgeyilmzh

      Cum, 08/11/2019 - 20:46
      Tam olarak şöyle 1- Paragraflar ayrıştırılıp rastgele seçilecel, 2- Paragraftaki cümleler ayrştırılıp rastgele seçilecek. 1. paragrafla 2. paragraftaki cümleler karışmamalı. 3- Cümlelerdeki kelimeler ayrıştırılmalı. Rastgele seçilmeli. Kelimeler bütün metinle karışmamalı sadece ait olduğu cümledeki yeri karıştırılmalı. 4- Kelimelerdeki harflerin yeri karıştırılmalı. Bütün metinle karıştırılmamalı. Misal Ben okula gidiyorum. Cümlesinde ben kelimesinin yerleri karşmalı okula kelimesinin harfleri karışmalı gibi. Benim sorunum karışma kısmı ile ilgili çözemedim bunu daha.

      grkn_gll

      Cum, 08/11/2019 - 21:28
      Karıştırma sorununu da hallettim sayılır. Bir şey daha soracağım kusura bakmazsanız. Tüm verileri (paragraf, kelime, cümle ve harfler) ya da aralarından birini seçip rastgele karıştırdık diyelim. Yeniden metni oluştururken hangi veriden yararlanarak oluşturacağız. Çünkü ayrı ayrı verileri çekip karıştırıyoruz ve hangi veriyi karıştırdıysak ancak o verilerle cümleyi yeniden oluşturabiliriz. Dictionary yapısı kullandığım için bu mümkün olabilir. Metin oluşturma konusunda da biraz bilgi verebilirseniz programı tamamlayabilirim ve mail üzerinden ya da buradan kodları gönderebilirim.

      ozgeyilmzh

      Cum, 08/11/2019 - 21:34
      Yeniden bir metin oluşturmak gibi bir şey yapmıyoruz aslında dediğim gibi hepsi kendi arasında karıştırılacak. Paragraflar diyelim üç paragraf var 1-2-3 şekilde bu rastgele olduğunda 3-1-2 şeklinde olmalı. Cümleler ise hangi paragrafa aitse o parafraf içinde karıştırılmalı. 1. paragraf 4 cümle var 3-1-4-2 şeklinde 2. paragraf 3 cümle varsa 2-1-3 ... Böyle devam ediyor. Kelimeleride önceki yorumda açıklamıştım. Mailden yollarsanız güzel olur. ozgeyilmazh@gmail.com

    0

    Recep Özen

    08 Kasım 2019

    Öncelikle merhaba karıştırma işlemini yapmadım ancak şu kod işini görür diye tahmin ediyorum. 

     

    private void metniParcala() {
    
            String text = "Dünya'nın dış kabuğu ile bu kabuğun üzerindeki atmosfer (hava) ve hidrosfer (okyanuslar ve denizler) katmanları doğrudan gözlemle incelenebilir. Oysa Dünya'nın iç bölümlerine ulaşarak yapısını doğrudan inceleme olanağı yoktur. Dünya'nın iç yapısına ilişkin bütün bilgiler depremlerin incelenmesinden ve Dünya'nın içinde var olduğu düşünülen maddeler üzerindeki deneylerden elde edilmiştir. Yanardağların varlığına ve yer kabuğunun yüzeyindeki ısı akışı ölçümlerine dayanarak Dünya'nın iç bölümlerinin çok sıcak olduğunu biliyoruz. Yer kabuğunun derinliklerine doğru indikçe kayaçların sıcaklığı her kilometrede 30 °C kadar yükselir. Böylece; kabuğun en alt katmanlarının çok daha üstünde yer alan kayaçlar kızıl kor haline dönüşür. Aslında Dünya'nın büyüklüğüne oranla yer kabuğu çok incedir. Eğer Dünya'yı bir futbol topu büyüklüğünde düşünürsek kabuğu da ancak topun üzerine yapıştırılmış bir posta pulu kalınlığındadır. Kabuğun altında kalan kayaçlar ise akkor sıcaklığına kadar ulaşır.\n" +
                    "\n" +
                    "Depremlerin nedeni, yer kabuğundaki bir kırıkla birbirinden ayrılan iki büyük kütlenin (levhanın) birdenbire harekete geçerek üst üste binmesi ya da uzaklaşması sonucunda yer kabuğunun şiddetle ileri geri sarsılmasıdır. Büyük bir depremde bazi titreşimler Dünya'nın öbür yüzündeki dairesel bir alanda \"odaklanır\". Buna karşılık bazı titreşimler çekirdeği aşıp öbür yana geçmez. Böylece Dünya'nın öbür yüzünde hiçbir titreşimin duyulmadığı halka biçiminde bir \"gölge\" belirir. Bu gölgenin boyutları ölçülerek çekirdeğin büyüklüğü hesaplanabilir. Ayrıca deprem titreşimlerinin yayılma hızı saptanarak içinden geçtikleri maddelerin yoğunluğu, dolayısıyla bileşimi belirlenebilir. Eritilmiş kayaçlarla yapılan laboratuvar deneyleri bu çalışmalara büyük ölçüde ışık tutar. Dünya'nın yüzeyi, kalınlığı 6 ile 70 km arasında değişen bir \"kabuk\" katmanıyla örtülüdür. Yerkabuğu denen bu katman daha ağır maddelerden oluşan ve 2.865 km derine inen çok kalın \"manto\" katmanının üzerine oturur. Mantonun bittiği yerde Dünya'nın merkezine kadar 3.473 km boyunca uzanan \"çekirdek\" başlar. Jeologlara göre, içteki manto katmanı çok büyük kabarma hareketleri sonucunda yerkabuğunu iterek birçok yerde yüzeye çıkmıştır. Ayrıca normal olarak yerkabuğunun yapısında bulunmayan bazı kayaçlar da yanardağı hareketleri nedeniyle Dünya'nın yüzeyine ulaşmıştır. Jeologlar bu verilere dayanarak mantonun üst kesimlerinin \"ültrabazik\" korkayaçlardan oluştuğunu ileri sürerler. Bir yanda asit kayaç olarak nitelenen granitin yer aldığı kayaç sınıflandırmasının öbür ucunda bulunan bu ültrabazik kayaçlar ağır demir ve magnezyum silikatlardan oluşur. Mantonun alt bölümlerinin de aynı yapıda, ama daha ağır ve yoğun olduğu sanılmaktadır. Çekirdeğin yapısındaki maddeler ise hem mantodakilerden daha ağır, hem de hiç değilse çekirdeğin dış bölümünde sıvı haldedir. Buna karşılık çekirdeğin içinin manto ve kabuk gibi katı olduğu sanılıyor. Yerçekirdeğinde olağanüstü bir basınç vardır. Bilinen elementlerin çoğu böylesine büyük bir basınç altında çok yoğunlaşmış olarak bulunabilir; ama jeologların genel kanısı, bazı demirli göktaşları (meteoritler) gibi çekirdeğin de metal halindeki nikel ve demirden oluştuğudur." +
                    "\n";
    
            List<String> paragrafList = new ArrayList<>();
            List<String> cunleList = new ArrayList<>();
            List<String> kelimeList = new ArrayList<>();
    
            int startCounter1 = 0;
            for (int i = 0; i < text.length(); i++) {
                if (text.substring(i, i + 1).equals("\n")) {
                    paragrafList.add(text.substring(startCounter1, i));
                    startCounter1 = i;
                }
            }
    
            int startCounter2 = 0;
            for (int i = 0; i < text.length(); i++) {
                if (text.substring(i, i + 1).equals(".")) {
                    cunleList.add(text.substring(startCounter2, i));
                    startCounter2 = i;
                }
            }
    
            int startCounter3 = 0;
            for (int i = 0; i < text.length(); i++) {
                if (text.substring(i, i + 1).equals(" ")) {
                    kelimeList.add(text.substring(startCounter3, i));
                    startCounter3 = i;
                }
            }
        }

     

      ozgeyilmzh

      Cum, 08/11/2019 - 14:26
      Bu kodu denedim ama karıştırma işini yapmadı. Sadece ayrıştırma işlemi oldu. Şöyle bir link buldum https://www.geeksforgeeks.org/collections-shuffle-java-examples/ Bunu deneyeceğim.
    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.