Member 14993155 Ответов: 2

Как я могу что Java мобильное


Это не дает мне всех персон
что я могу сделать?
Цитата:
Girilecek Departman Sayısı >> 2
DEPARTMAN NO >> 123123
DEPARTMAN ADI >> QWEQWE
QWEQWE Departmanındaki Personel Sayısı >> 2
Personel ADI >> A
Personel SOYADI >> B
Персона Яси >> 1
Personel ADI >> D
Personel SOYADI >> E
Персона Яси >> 2
DEPARTMAN NO >> 321321
DEPARTMAN ADI >> TTTT
TTTT Departmanındaki Personel Sayısı >> 2
Personel ADI >> E
Personel SOYADI >> F
Персона Яси >> 4
Personel ADI >> Y
Personel SOYADI >> H
Персона Яси >> 4
-----------------------------
1 - Tüm Departman Bilgilerini Listele
2 - Departman Adına Göre Arama Yap
3 - Personel Adına Göre Arama Yap
4 - Servis Güzergâhına Göre Arama Yap
5 - Yaşı En Büyük ve En Küçük Personel/Personelleri Bul
6 - чикиш
-----------------------------
Işlem Numarasını Girin >> 1
-----------------------------
Departman No: 123123 Departman Ad: QWEQWE
1. Персона 2 D E 2
1. Персона 2 D E 2
Departman No: 321321 Departman Ad: TTTT
-----------------------------
-----------------------------



И это еще одна ошибка


Цитата:
Girilecek Departman Sayısı >> 3
DEPARTMAN NO >> 123
DEPARTMAN ADI >> AAA
AAA Departmanındaki Personel Sayısı >> 1
Personel ADI >> ASD
Personel SOYADI >> DSA
Персона Яси >> 1
DEPARTMAN NO >> 321
DEPARTMAN ADI >> BBB
BBB Departmanındaki Personel Sayısı >> 1
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс 1 выходит за пределы длины 1
в odev.AnaSayfa.main(AnaSayfa.java:31)
Ява:31
departmanlar[i].personeller[i] = новый персонаж(departmanlar[i].getdepNo());


Что я уже пробовал:

package odev;

import java.util.Scanner;

public class AnaSayfa {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.print("Girilecek Departman Sayısı >> ");
		int length = sc.nextInt();

		if (length > 0) {

			Departman[] departmanlar = new Departman[length];

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

				System.out.print("DEPARTMAN NO >> ");
				int dn = sc.nextInt();
				System.out.print("DEPARTMAN ADI >> ");
				String da = sc.next();
				departmanlar[i] = new Departman(dn, da);

				System.out.print(da + " Departmanındaki Personel Sayısı >> ");
				int ps = sc.nextInt();
				if (ps > 0) {
					departmanlar[i].createPerList(ps);
					
					while (ps != 0) {
						departmanlar[i].personeller[i] = new Personel(departmanlar[i].getdepNo());
						System.out.print("Personel ADI >> ");
						String pa = sc.next();
						departmanlar[i].personeller[i].setperAd(pa);
						System.out.print("Personel SOYADI >> ");
						String psa = sc.next();
						departmanlar[i].personeller[i].setperSoyad(psa);
						System.out.print("Personel YASI >> ");
						int py = sc.nextInt();
						departmanlar[i].personeller[i].setperYas(py);
						
					ps--;
					}

					

				} else {
					continue;
				}

			} // for
			while (true) {
				System.out.println("-----------------------------");
				System.out.println("1- Tüm Departman Bilgilerini Listele");
				System.out.println("2- Departman Adına Göre Arama Yap");
				System.out.println("3- Personel Adına Göre Arama Yap");
				System.out.println("4- Servis Güzergâhına Göre Arama Yap");
				System.out.println("5- Yaşı En Büyük ve En Küçük Personel/Personelleri Bul");
				System.out.println("6- Çıkış");
				System.out.println("-----------------------------");
				System.out.print("İşlem Numarasını Girin >> ");
				int giris = sc.nextInt();

				if (giris == 1) {
					System.out.println("-----------------------------");
					int ct = 0;
					
					for (int i = 0; i < departmanlar.length; i++) {
						departmanlar[i].showDepartmanData();
						while (ct != departmanlar[i].personeller.length) {
							departmanlar[i].personeller[i].showPerData(i);
							ct++;
						}
					} // for departman

					System.out.println("-----------------------------");

				} else if (giris == 2) {
					// for(int i=0;i<departmanlar[i].personeller.length;i++) {
					// System.out.println(departmanlar[i].personeller[i].getperdepNo());
					// }

				} else if (giris == 3) {
					for (int i = 0; i < departmanlar.length; i++) {
						System.out.println(departmanlar[i].getdepAd() + " Departmanındaki Personel Sayısı: "
								+ departmanlar[i].personeller.length);
					}

					// System.out.println(asd.getPerdepNo());

				} else if (giris == 4) {
					// System.out.println(depOBJ.getLength2());

				} else if (giris == 5) {
					System.out.println("5 numaralı tuşa baştınız");

				} else if (giris == 6) {
					System.out.println("Çıkış Yapıldı.");
					break;
				} else if (giris < 1 || giris > 6) {
					System.out.println("Hatalı Giriş!");
					System.out.print("Devam için birsey yazıp Enter Basınız >>");
					sc.next();

				}
			} // while

		} // length if bloğu
		else {
			System.out.println("Negatif Sayı veya Sıfır Giremezsiniz!");
		}
	}// main bloğu
}// class bloğu

package odev;

public class Personel {
	
	private int depNo;
	private int perID;
	private String perAd;
	private String perSoyad;
	private int perYas;
	private static int perSayisi = 0;
	
	
	
//Constructor
public Personel(int depNo) {
	this.depNo = depNo;
	perID = ++perSayisi;
}
//setter
public void setperAd(String perAd) {this.perAd = perAd;}
public void setperSoyad(String perSoyad) {this.perSoyad=perSoyad;}
public void setperYas(int perYas) {this.perYas = perYas;}

//getter
public int getperdepNo() {return depNo;}

public String getperAd() {return perAd;}

public String getperSoyad() {return perSoyad;}

public int getperYas() {return perYas;}


public int getID() {return perID;}

public void showPerData(int sayi) {
	 System.out.println((sayi+1)+". Personel "+this.getID()+" "+this.getperAd()+" "+this.getperSoyad()+" "+this.getperYas());
}//showPerData


}//CLASS

package odev;

public class Departman {
	private int depNo;
	private String depAd;
	public Servis servis[];
	public Personel personeller[];

	public Departman() {

	}

	public Departman(int depNo, String depAd) {
		this.depNo = depNo;
		this.depAd = depAd;
	}

	public void createPerList(int n) {
		this.personeller = new Personel[n];
	}

	public void setdepNo(int depNo) {
		this.depNo = depNo;
	}

	public void setdepAd(String depAd) {
		this.depAd = depAd;
	}

	public int getdepNo() {
		return depNo;
	}

	public String getdepAd() {
		return depAd;
	}

	public void showDepartmanData() {
		System.out.println("Departman No: " + this.getdepNo() + " Departman Ad: " + this.getdepAd());
	}

}

2 Ответов

Рейтинг:
4

Richard MacCutchan

Вы используете неправильный индексатор для personeller массив. Он должен быть использован ps, количество personeller записи, а не i что такое число departmanlar записи.

departmanlar[i].createPerList(ps); // ps is the count of personnel entries for this department

while (ps != 0) {
    departmanlar[i].personeller[i] = new Personel(departmanlar[i].getdepNo()); // using the wrong index value for personneller
    System.out.print("Personel ADI >> ");
    String pa = sc.next();
    departmanlar[i].personeller[i].setperAd(pa);  // still using the wrong index value for personneller


Рейтинг:
16

Patrice T

Цитата:
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индекс 1 выходит за пределы длины 1
в odev.AnaSayfa.main(AnaSayfa.java:31)
Ява:31
departmanlar[i].personeller[i] = новый персонаж(departmanlar[i].getdepNo());

Независимо от того, что это за деталь, сообщение означает, что вы пытаетесь сделать что-то в части массива/списка, которая не существует.
Можно заподозрить, что проблема заключается в использовании одного и того же индекса для 2 частей кода
departmanlar[i].personeller[i] = new Personel(departmanlar[i].getdepNo());
             ^              ^

Единственный способ узнать подробности-это использовать отладчик для проверки переменных при ошибке.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Вы должны довольно быстро найти, что не так.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

jdb - отладчик Java[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.