Şimdi Ara

Ufak Bir Yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
17
Cevap
0
Favori
1.140
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Öncelikle Merhaba Arkadaşlar.
    Ufak bir yardıma ihtiyacım var yardımcı olursanız sevinirim

     
    import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {

    Scanner scan=new Scanner(System.in);

    int x,y,sec,index,z,c;
    String nesne;
    System.out.print("Kaç Nesne Girmek İstiyorsunuz: ");
    x=scan.nextInt();

    Pazar liste = new Pazar(x);


    liste.ekle();
    liste.yaz();
    System.out.println("Bir Nesne Silmek İstiyormusunuz?(Evet için 1)");
    sec=scan.nextInt();
    if (sec==1) {
    System.out.println("Silmek İstediğiniz Nesnenin Sıra Numarası: ");
    y=scan.nextInt();
    liste.sil(y);
    }
    liste.yaz();
    System.out.println("Bir Nesne Eklemek İstermisiniz?(Evet için 1)");
    z=scan.nextInt();
    if (z==1) {
    System.out.println("İndex Gir: ");
    index=scan.nextInt();
    System.out.println("Nesneyi Gir: ");
    nesne=scan.nextLine();
    liste.ekle2(index,nesne);


    }

    liste.yaz();
    }

    }





     

    import java.util.Scanner;

    public class Pazar {

    Scanner scan=new Scanner(System.in);


    String[] liste;
    int max;

    int ElemanS;

    public Pazar(int maxd){
    max=maxd;
    liste=new String[maxd];
    ElemanS=0;
    }

    public void ekle(){

    for (int i = 0; i < max; i++) {
    System.out.print("Nesne Gir: ");
    liste[i]=scan.nextLine();
    }
    }

    public void yaz(){
    System.out.println("----------------LİSTE----------------");
    for (int j = 0; j < max; j++) {
    System.out.println( j +"-"+liste[j]);
    }
    }

    public void sil(int index){
    if(index>=0 && index <max){
    for (int i = index; i < max-1; i++) {
    liste[i]=liste[i+1];
    }
    max--;
    }

    }

    public void ekle2(int index,String nesne){
    for (int i = max-1; i >= index; i--) {
    liste[i+1]=liste[i];
    }
    liste[index]=nesne;
    max--;
    }

    }






    Olay şu: Ben burdaki listenin istediğim indexine eleman eklemek istiyorum.bunu ekle2 adlı class da gerçekleştiriyorum.Bu kodlarla hiç bir şekilde hata almıyorum ve aynıtekniği kullanarak istediğim indexi silebiliyorum ama istediğim indexe eleman eklemeye gelince java.lang.ArrayIndexOutOfBoundsException hatası alıyorum.







  • Merhaba,
    Sorunun ekle2'nin sonunda. orda max-- yerine max++ yazman gerekiyor. İndex belirtirken de java'nın index kuralına uymaya dikkat et biliyorsun 0. sıra 1. eleman demek arrayde.
    Kolay gelsin...



    < Bu mesaj bu kişi tarafından değiştirildi dodo1750 -- 27 Temmuz 2013; 16:39:54 >
  • quote:

    Orijinalden alıntı: dodo1750

    Merhaba,
    Sorunun ekle2'nin sonunda. orda max-- yerine max++ yazman gerekiyor. İndex belirtirken de java'nın index kuralına uymaya dikkat et biliyorsun 0. sıra 1. eleman demek arrayde.
    Kolay gelsin...

    Cevabını için teşekkür ederim fakat bir şey deiştirmiyor hatayı o kısma gelmeden alıyorum liste[i+1]=liste olan kısım için bu hatayı veriyor max++ yaptığım halde düzelmedi.



    < Bu mesaj bu kişi tarafından değiştirildi Servius -- 27 Temmuz 2013; 22:05:34 >
  • Servius kullanıcısına yanıt
    Tam olarak hangi değerleri sırasıyla girdiğinde hata alıyorsun söyleyebilir misin ben denediğim bir kaç seferde hata almadığım için soruyorum
  • quote:

    Orijinalden alıntı: dodo1750

    Tam olarak hangi değerleri sırasıyla girdiğinde hata alıyorsun söyleyebilir misin ben denediğim bir kaç seferde hata almadığım için soruyorum

    Hocam öncelikkle cevap için teşekkür ederim.
    Kodlar aynı şekildeyken mi hata almadınız ?

    Şuan bununla alakalı 2 tane sorunum var yardımcı olursanız sevinirim.

    1- sil metodunu atlayıp istediğim indexe eleman girmeye çalıştığımda hata alıyorum
    2-Sil metoduna girip eğer 1 elemanı sildiysem bu sefer istediğim indexe ekleme yapabiliyorum.
    fakat burdada bir sıkıntım var . Ben girmek istediğim nesneyi kullanıcıdan almak istiyorum fakat orayı atlayıp direk boş olarak yazıyor ancak direk
    liste.ekle2[index,"nesne"] şeklinde yaptığımda nesneyi yazıyor.
  • quote:

    Orijinalden alıntı: Servius

    quote:

    Orijinalden alıntı: dodo1750

    Tam olarak hangi değerleri sırasıyla girdiğinde hata alıyorsun söyleyebilir misin ben denediğim bir kaç seferde hata almadığım için soruyorum

    Hocam öncelikkle cevap için teşekkür ederim.
    Kodlar aynı şekildeyken mi hata almadınız ?

    Şuan bununla alakalı 2 tane sorunum var yardımcı olursanız sevinirim.

    1- sil metodunu atlayıp istediğim indexe eleman girmeye çalıştığımda hata alıyorum
    2-Sil metoduna girip eğer 1 elemanı sildiysem bu sefer istediğim indexe ekleme yapabiliyorum.
    fakat burdada bir sıkıntım var . Ben girmek istediğim nesneyi kullanıcıdan almak istiyorum fakat orayı atlayıp direk boş olarak yazıyor ancak direk
    liste.ekle2[index,"nesne"] şeklinde yaptığımda nesneyi yazıyor.

    Sorduğunuz sorunun cevabıda şu şekilde sanırım:

    ilk olarak 3 eleman girmek istiyorum,elemanları giriyorum sonra ilk adımı geçiyrum 2 yazark yani silme işlemi gerçekleştirmiyorum.Daha sonra istediğim indexe nesne yazmak için 1 e basarak metodun içine giriyorum ve bana index soruyor.İndexi girdiğim anda outofbound hatası alıyorum




  • System.out.println("İndex Gir: ");
    index=scan.nextInt();
    System.out.println("Nesneyi Gir: ");
    String nesne1=scan.next();
    liste.ekle2(index,nesne1);

    Şöyle bir dener misin ?
  • Bu arada silme işlemi yapmıyorsun.
    Sadece elemanların yerlerini değiştiriyorsun.
    5 Elemanlı bir dizi diyelim

    -----
    | a | <=0
    -----
    | b | <=1
    -----
    | c | <=2
    -----
    | d | <=3
    -----
    | e | <=4
    -----

    2. elemanı sil dediğimizde sonuç aşağıda ki gibi olur.
    -----
    | a | <=0
    -----
    | b | <=1
    -----
    | d | <=2
    -----
    | e | <=3
    -----
    | e | <=4
    -----

    Localde tekrar yaratıp değişkenleri attıktan sonra dizi değişkenine ataman daha doğru olur gibi.
    Son olarak algoritma mantığın da güzelmiş :)
  • Thook T kullanıcısına yanıt
    Cevabınız için teşekkürler.

    İlk verdiğiniz kodları denedim ,Bunlarla birlikte ekle2 deki nesneyide girebiliyorum fakat nextline ile neden bir girdi alamadığımı anlamadım.
    Yani orada bütün satırı almasında ne gibi bir sorun çıkartıyor niye çıkartıyor.

    Bu arada hala sil metodunu atlayıp istediğim index e ekleme yapamıyorum bir bilginiz varsa söylermisiniz.Bu classa biraz daha eklemeler yapmak istiyorum fakat bu sorunu halletmeden de ilerlemek istemiyorum açıkcası
  • quote:

    Orijinalden alıntı: Servius

    Cevabınız için teşekkürler.

    İlk verdiğiniz kodları denedim ,Bunlarla birlikte ekle2 deki nesneyide girebiliyorum fakat nextline ile neden bir girdi alamadığımı anlamadım.
    Yani orada bütün satırı almasında ne gibi bir sorun çıkartıyor niye çıkartıyor.

    Bu arada hala sil metodunu atlayıp istediğim index e ekleme yapamıyorum bir bilginiz varsa söylermisiniz.Bu classa biraz daha eklemeler yapmak istiyorum fakat bu sorunu halletmeden de ilerlemek istemiyorum açıkcası

    Hocam ,

    for (int i = max-1; i > index; i--) {
    liste[i+1]=liste;
    }

    bu for loopta i'yi arrayin son indexi olarak başlatıp aşşağıda i+1 diyerek sınır dışı bi eleman belirtiyosun ondan sıkıntı çıkıyo. Benim önerim direkt replace eden bir metod kullanman yani ekle2'deki for loop kısmını ve "max--" kısmını sil.
    silmeden ekleme konusunda böyle bi yol izlersen sorun çıkmıyo örneğin benim inputlarım şöyle ve hiç bir sorun çıkmadı:

    eklediğim eleman sayısı 3 tane sırasıyla:

    deniz
    doruk
    demet

    silme işlemine 2 diyorum ardından

    indexe 1 diyorum

    nesneye doga diyorum

    yaz methodu sonucunda liste:
    deniz
    doga
    demet

    şeklinde değişiyor tabi nesnelerin başında noları da var.

    silip öyle ekleme işleminde daha ayrıntılı ne istediğini anlatırsan yardımcı olayım




  • dodo1750 D kullanıcısına yanıt
    Cevabınız ve ilginiz için teşekkür ederim.

    Benim istediğim sizin örneğe göre cevaplıyayım;

    Çıktının :
    deniz
    doga
    doruk
    demet olmasını istiyorum
    yani istediğim indexe eleman ekleyeceğim fakat eski elemanımız da durucak sadece onu kaydırıcaz,biz indexi 1 girdiysek sondan itibaren kaydırmaya başlıyacağız yani 3. nesne 4 2. nesne 3 1.nesne 2 olucak ve burda işlem son bulucak yani 0. nesne yerinde duruyor, 1. nesnemiz boşta suan diğer nesneler dolu ama dizinin boyutunu 1 arttırdık. Boş olan yerede istediğimiz nesneyi yazdırmış olucaz.
    Sanırım benim sorunum dizinin boyutunu arttırmakta Çünkü sil metoduna girip 1 nesneyi silince ekleme yapabiliyoruz.
  • quote:

    Orijinalden alıntı: Servius

    Cevabınız ve ilginiz için teşekkür ederim.

    Benim istediğim sizin örneğe göre cevaplıyayım;

    Çıktının :
    deniz
    doga
    doruk
    demet olmasını istiyorum
    yani istediğim indexe eleman ekleyeceğim fakat eski elemanımız da durucak sadece onu kaydırıcaz,biz indexi 1 girdiysek sondan itibaren kaydırmaya başlıyacağız yani 3. nesne 4 2. nesne 3 1.nesne 2 olucak ve burda işlem son bulucak yani 0. nesne yerinde duruyor, 1. nesnemiz boşta suan diğer nesneler dolu ama dizinin boyutunu 1 arttırdık. Boş olan yerede istediğimiz nesneyi yazdırmış olucaz.
    Sanırım benim sorunum dizinin boyutunu arttırmakta Çünkü sil metoduna girip 1 nesneyi silince ekleme yapabiliyoruz.


    Aaaaa hocamm açıkçası tahmin ettim böyle bir olay istediğinizi ancak imkansız bu yani en azından Javadaki standard Array classıyla . Şöyle açıklayım javadaki arrayin boyutu sabittir yani siz onu tanımlarken örneğin
    String[] liste = new String[5]; derseniz bu array 5 elemanlı olmak üzere sabitlenir. Bu boyutu değiştirmek için listeyi yeniden tanımlamanız gerekir örneğin liste = new String[6]; gibi. Siz max değişkenini azalttığınızda arrayinizin boyutu değişmez sadece max'in tuttuğu değer değişir. Benim size önerim Array yerine ArrayList kullanmanız olacak. ArrayList classı da aynı özelliklere sahip ancak ArrayList tanımlarken boyut belirtmeniz gerekmiyor. ArrayListte boyut yeni eleman eklediğinizde otomatik olarak artar sizin herhangi bir işlem yapmanıza gerek yok. Eğer daha da ayrıntılı şekilde ilgilenmek isterseniz ve teknik olarak kusursuz bi liste isterseniz Linked List algoritmalarına bakmanızı tavsiye ederim. Ancak Linked List Array ve ArrayListe göre biraz daha karmasık.

    Gelelim hatayı Array'de neden aldığınızın tam açıklamasına (sizin istediğiniz şekilde test edince):

    Diyelim ki elemanları saklayan listenin türünü Array olarak tanımladınız ve kullanıcı 3 tane eleman girmek istedi: deniz, doga ve demet. Bu aşamada oluşturulan arrayin boyutu sizin yazdığınız Pazar classında max değişkeniyle tanımlanıyor ve değeri 3. Şimdiiii... Adam silme işlemini reddetti ve ekle2 metoduna geldi. Sizin orda max'i arttırmanız veya azaltmanız elemanları içinde tutan arrayin sınırlarını etkilemez sadece max integer'ının değerini değiştirir. Yani arrayi yeniden tanımlamadan ve yeni bir boyut belirtmeden listeyi genişletmeniz Array classıyla mümkün olmuyor. 3 ise 3 olarak kalıyor ve siz 4. bir eleman eklemek istediğinizde, mesela doruk, sınır dışına çıkıyorsunuz. ArrayList classında kullanıcı eleman ekledikçe listenin boyutu artıyor ve sildikçe liste boyu azalıyor sizin max şeklinde bi değişken tanımlamanıza bile gerek yok.

    Eğer ArrayList kullanarak yapmak isterseniz size örnek bir kod atabilirim ve onu inceleyebilirsiniz

    Umarım yardımı olur




  • dodo1750 D kullanıcısına yanıt
    Çok teşekkür ederim çok işime yaradı hala bakıp bakıp kafa yoruyordum :)


    Eğer zahmet olmassa bir örnek verirseniz sevinirim hocam şimdiden teşekkürler.Ona bakıp birde onunla deniyeyim inş olur bu sefer.
  • dodo1750 D kullanıcısına yanıt
    Hocam ArrayListle sadece eklemeyle ilgili boyle birşey yaptım.İlk girişi 0dan başlatıp 0. index 1. index diye gidip daha sonra 0. indexe giriş yapabiliyorum ve eski nesnem yerinde duruyor sadece kaydırıyor yani benim yapmak istediğimi yapmış oldum şuan tek eksik bunu diğer koda monte etmek yada komple baştan yazma sanırım bu classla beraber daha kolay olucak.

    Yardımlarınız için Teşekkür ederim.


     
    package Pazar2;

    import java.util.Scanner;

    public class main2 {


    public static void main(String[] args) {

    Scanner scan=new Scanner(System.in);
    Alist list = new Alist();

    int index,sec,a;
    String nesne;

    System.out.print("Eleman Eklemek için 1 e basın:");
    sec=scan.nextInt();
    while (sec==1) {

    System.out.print("Bir İndex Gir:");
    index=scan.nextInt();
    System.out.print("Bir Nesne Gir:");
    nesne=scan.next();
    list.ekle(index, nesne);
    list.yaz();
    System.out.print("Devam mı?(1)(2)");
    a=scan.nextInt();
    if(a==1){
    sec=1;
    }
    else if (a==2) {
    list.yaz();
    break;
    }
    }




     
    package Pazar2;

    import java.util.ArrayList;

    public class Alist {


    ArrayList<String> liste=new ArrayList<String>();


    public Alist(){

    }


    public void ekle(int x,String nesne){
    liste.add(x,nesne);
    }
    public void yaz(){
    System.out.println("--------------Liste--------------");
    for (int i = 0; i <liste.size(); i++) {

    System.out.println(liste.get((i)));

    }

    }
    }





    < Bu mesaj bu kişi tarafından değiştirildi Servius -- 31 Temmuz 2013; 1:24:54 >




  • Servius kullanıcısına yanıt
    Şu an bir sıkıntı yok gibi gözüküyo böyle devam ;) bir sorun olursa pm atabilirsin :)
    Kolay gelsin...
  • Al arkadaşım bu da normal "array"ler ile silme ekleme işlemi.


     
    import java.util.Scanner;

    public class Pazar {

    Scanner scan=new Scanner(System.in);
    String[] liste;

    public Pazar(int maxd){
    String[] localListe = new String[maxd];
    liste=localListe;
    }

    public void ekle(){

    for (int i = 0; i < liste.length; i++) {
    System.out.print("Nesne Gir: ");
    liste[i]=scan.nextLine();
    }
    }

    public void yaz(){
    System.out.println("----------------LİSTE----------------");
    for (int j = 0; j < liste.length; j++) {
    System.out.println( j +"-"+liste[j]);
    }
    }

    public void sil(int index){

    int count=0;
    if(index >0){
    String[] localListe = new String[liste.length-1];

    for(int i=0;i<liste.length;i++){
    if(i!=index){
    localListe[count]=liste[i];
    count++;
    }

    }
    liste=localListe;
    }
    }

    public void ekle2(int index,String nesne){

    if(index>=0 && index<=liste.length){
    String[] localListe = new String[liste.length+1];

    int count=0;
    for(int i=0;i<localListe.length;i++){

    if(i!=index){
    localListe[i]=liste[count];
    count++;
    }
    else{
    localListe[i]=nesne;
    }
    }
    liste=localListe;
    }
    }

    }





  • quote:

    Orijinalden alıntı: Thook

    Al arkadaşım bu da normal "array"ler ile silme ekleme işlemi.


     
    import java.util.Scanner;

    public class Pazar {

    Scanner scan=new Scanner(System.in);
    String[] liste;

    public Pazar(int maxd){
    String[] localListe = new String[maxd];
    liste=localListe;
    }

    public void ekle(){

    for (int i = 0; i < liste.length; i++) {
    System.out.print("Nesne Gir: ");
    liste[i]=scan.nextLine();
    }
    }

    public void yaz(){
    System.out.println("----------------LİSTE----------------");
    for (int j = 0; j < liste.length; j++) {
    System.out.println( j +"-"+liste[j]);
    }
    }

    public void sil(int index){

    int count=0;
    if(index >0){
    String[] localListe = new String[liste.length-1];

    for(int i=0;i<liste.length;i++){
    if(i!=index){
    localListe[count]=liste[i];
    count++;
    }

    }
    liste=localListe;
    }
    }

    public void ekle2(int index,String nesne){

    if(index>=0 && index<=liste.length){
    String[] localListe = new String[liste.length+1];

    int count=0;
    for(int i=0;i<localListe.length;i++){

    if(i!=index){
    localListe[i]=liste[count];
    count++;
    }
    else{
    localListe[i]=nesne;
    }
    }
    liste=localListe;
    }
    }

    }



    ya tabii gidip method içinde local yeni bir liste yaratıp sildiğinde -1 eklediğinde +1 boyut değiştirsen de olur ancak o class zaten ArrayList classının çok benzeri olur . Dediğim gibi senin ilk kodundaki maxd değişkenini arttırıp azaltman sıkıntı yaratıyordu üstteki koddaki gibi sildiğinde yeni bir liste tanımlarsan da ArrayList kullanmadan ArrayList methodlarının benzerlerini kendin yazmış olursun neyse tercih senin hangi yolu tercih edersen

    Kolay gelsin...




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.