Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Run Time'da Array Size arttırmaca (Java)


Bittus

Öne çıkan mesajlar

Bittus said:
said:
copy metodunda yeni bir küme oluşturup geri vermen gerekiyor. Sen argüman olarak verilen kümeyi değiştirmişsin. Orayı da düzeltmen lazım.

burada bir sorun yok ya. amaç zaten o. yani A=B yapmak olay.
SetOfIntegers C = new SetOfIntegers();
System.out.println(A.copy(C));
demişim zaten. aldığı küme boş küme yani.


Mantık hatası var. Argüman olarak verdiğin kümenin içeriğini değiştirmek doğru bir yaklaşım değil. Düzeltmek için bir iki tavsiye:

1) Copy metodunu parametresiz tanımla. Hangi kümede copy metodunu çağırırsan o kümenin bir kopyasını yaratıp geri ver.

2) Parametreyi aynı bırak ama metodu statik tanımla. Argüman olarak verdiğin kümenin kopyasını bırakıp geri ver.
Link to comment
Sosyal ağlarda paylaş

Bir tavsiye daha vereyim ama bu biraz daha gelişmiş sayılır.

public SetOfIntegers(int element) {
aSet = new int[1];
aSet[0] = element; //singletone
}
public SetOfIntegers(int element,int size) {

theSize = size;
aSet = new int; //a set with the first element
aSet[0] = element;
}

Yukardaki iki constructor'a bakarsan ilkinin ikincisinin daha genel bir hali olduğunu görüyorsun (size 1). İlk constructor'u şu şekilde değiştirip diğer constructor'dan yararlanabilirsin:

public SetOfIntegers(int element) {
this(element, 1);
}

Bu şekilde başka bir constructor çağıracaksan bunu ilk satırda yapman gerekiyor. Birden fazla constructor olduğu zaman çok yararlı bir yöntem.

Değişik metodlar yazarken bir çok yerde benzer bir mantık ve aynı satırları kullanıyorsun. Bu tür yerlerde kodu kopyalamak yerine ortak metod kullanmak tavsiye edilir. Yukardaki örnekte çok bir kazancın yok belki ama mantığı anlamana yardımcı olur belki.

Onun dışında

aSet[0] = element; //singletone

singleton yanlış anlamda kullanılmış. Bence şimdilik singleton ile kafanı kurcalama. Bu tür basit şeyler için comment yazmaya gerek yok, özellikle bir kaç satırlık metodlar kullanıyorsan. Karışık bir algoritma yazıyorsan ya da yazdığın şeyin ne olduğu belli olmuyorsa ne yaptığını anlatan kısa bir comment yazman yeterli. Onun dışında comment yazmış olmak için comment yazmak gereksiz olduğu kadar komik de oluyor.

Metod için bu tür yorumlar yazmak yerine metodun/class'ın ne yaptığını anlatan Javadoc yazmak çok daha mantıklı. İlgini çekerse: http://java.sun.com/j2se/javadoc/writingdoccomments/
Link to comment
Sosyal ağlarda paylaş

Evet sonunda bitti...

Son halleri böyle oldu:

SetOfIntegers class


import java.util.Arrays;

public class SetOfIntegers {
boolean temp = false;
private int capacity;
private int set[];
private int MAX_VALUE = 100;

public SetOfIntegers() {
set = new int[0];
}
public SetOfIntegers(int element) {
set = new int[1];
set[0] = element;
}
public SetOfIntegers(int element,int size) {

capacity = size;
set = new int[capacity];
set[0] = element;
}
public void addElement(int index,int e) {

if(Arrays.binarySearch(set, e) <0){

set[index-1] = e;
}
}
public SetOfIntegers copy(SetOfIntegers copied) {
//returns a copy of the given set
copied.set = Arrays.copyOf(set.clone(), set.length);
return copied;

}
public SetOfIntegers union(SetOfIntegers otherSet) {
//returns the union of two given set of integers
SetOfIntegers union = new SetOfIntegers();
union.set = Arrays.copyOf(set.clone(), set.length+otherSet.capacity);
for(int i=0; i<otherSet.capacity; i++){
union.addElement(set.length+i+1, otherSet.set[i]);
}
return union;
}
public SetOfIntegers intersection(SetOfIntegers otherSet) {
//return the intersection of two given set of integers
int[] temp = new int[MAX_VALUE];
int j=0;
for(int i=0;i<=otherSet.capacity-1;i++){
if(Arrays.binarySearch(set, otherSet.set[i]) >0){
temp[j] = otherSet.set[i];
j++;
}
}
SetOfIntegers intersection = new SetOfIntegers();
intersection.set = Arrays.copyOf(temp.clone(), j);
return intersection;

}
public void inTheSet(int e) {
//checks if the given element is in the specified set
if(Arrays.binarySearch(set, e) >0){
System.out.println(e+" is in the Set");
}
else
System.out.println(e+" is NOT in the Set");
}
public void isSubset(SetOfIntegers otherSet){
//checks if the given set is a subset of the specified set
for(int i=0;i<=set.length-1;i++){
if(Arrays.binarySearch(otherSet.set, set[i]) <0){
temp = false;
}
else {
temp = true;

}
}
if(temp == true)
System.out.println("It is a Subset");
else
System.out.println("It is NOT a Subset");

}
public void isSuperset(SetOfIntegers otherSet){
//checks if the given set is a superset of the specified set
for(int i=0;i<=otherSet.capacity-1;i++){
if(Arrays.binarySearch(set, otherSet.set[i]) <0){
temp = false;
}
else {
temp = true;

}
}
if(temp == true)
System.out.println("It is a Superset");
else
System.out.println("It is NOT a Superset");

}
public void isEqual(SetOfIntegers otherSet){
//checks if the two given sets are equal
if(Arrays.equals(set, otherSet.set) == true){
System.out.println("Two Sets Are Equal");
}
else
System.out.println("Two Sets Are NOT Equal");

}

public String toString() {
return Arrays.toString(set);
}

}




SetTest (Main)


public class SetTest {


public static void main(String[] args ) {

SetOfIntegers A = new SetOfIntegers(1, 5);
A.addElement(2, 3);
A.addElement(3, 11);
A.addElement(4, 22);
A.addElement(5, 13);
SetOfIntegers B = new SetOfIntegers(5, 4);
B.addElement(2, 7);
B.addElement(3, 11);
B.addElement(4, 33);
SetOfIntegers C = new SetOfIntegers();
SetOfIntegers D = new SetOfIntegers();
SetOfIntegers E = new SetOfIntegers();
C = A.union(B);
D = A.intersection(B);
A.copy(E);
A.isSubset(C);
A.isSuperset(D);
A.isEqual(E);
A.isEqual(C);
}




biliyorum mükemmel değil kodlar, hatta çok kötü ama en azından hocanın istediklerini veriyor diye düşünüyorum.

daha fazla geliştirmek için zamanım kalmadı 23:59:59 dan önce yollamam lazım yoksa 5 puandan olcam hehe
Link to comment
Sosyal ağlarda paylaş

Hatalarımı biliyorum ama işte zaman biraz kısıtlı.

mesela addElement methodunda eğer aynı elemandan varsa eklemiyor ama array size aynı kalıyor. o yüzden de fazladan sıfır oluyo arrayde. orada set[j] = set[j+1] diye kaydırıp element sayısı kadar büyüklükteki bir arraye kopyalayabilrdim.

ama dediğim gibi kodun properly çalışması gerekmiyor. hocanın istediği encapsulation olduğu için pek sorun olacağını zannetmiyorum.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...