ورود

View Full Version : interface



suraty
جمعه 14 آذر 1393, 13:09 عصر
با سلام،
مشکلی در رابطه با این برنامه داشتم.
ابتدا interface را به این ترتیب تعریف نموده ام.


public interface M {
int getM();
}

سپس کلاس دیتاست را به این شکل:


public class dataset{

int count=0;
M max;
public dataset()
{
count++;
}
public void add(M val)
{
if(max.getM()>val.getM())
max=val;
count++;
}
public M getmax()
{
return max;
}



و کلاسی به نام B:


public class B implements M{
private int m=0;
public B()
{

}
public B(int t)
{
m=t;
}
public int getM()
{
return m;
}


حال در main نوشته ام:


public static void main(String[] args) {
// TODO code application logic here

dataset d=new dataset();
d.add(new B());
d.add(new B(200));
System.out.println(d.getmax().getM());
System.out.println("Hello...!");

}


اما با خطای NULL point exception مواجه شده ام. به این علت که در تابع افزودن کلاس دیتا ست متغیر max مقدار اولیه نداشته و احتمالا getM تهی است.
اما نمیدانم چگونه آن را رفع نمایم.
لطفا راهنماییم نمایید.

ahmad.mo74
جمعه 14 آذر 1393, 14:01 عصر
سلام، ایرادتون اینه که توی DataSet آبجکت max رو مقدار دهی نکردید


public interface M {

int getM();

}


public class B implements M {


private int m;


public B() {
}


public B(int m) {
this.m = m;
}


@Override
public int getM() {
return m;
}


}


public class DataSet {


private M max;
private int count;


public DataSet() {
count++;
}


public void add(M val) {
if (max == null || max.getM() < val.getM()) {
max = val;
}
count++;
}


public M getmax() {
return max == null ? new B() : max;
}


public int getCount() {
return count;
}

}


public class Main {


public static void main(String[] args) {
DataSet d = new DataSet();
d.add(new B());
d.add(new B(200));
System.out.println(d.getmax().getM());
}


}

ahmad.mo74
جمعه 14 آذر 1393, 18:16 عصر
پستمو چرا پاک کردید؟ :)))

اینطور هم میشه نوشت :


public interface Value<T> {


T get();


}



public class DataSet<T extends Comparable<T>> {


private Value<T> max;
private Value<T> min;
private int count;


public void add(Value<T> value) {
if (max == null) {
max = value;
min = value;
} else if (Objects.compare(value.get(), max.get(), Comparator.<T>naturalOrder()) == 1) {
max = value;
} else if (Objects.compare(min.get(), value.get(), Comparator.<T>naturalOrder()) == 1) {
min = value;
}
count++;
}


public Value<T> getMax() {
return max;
}


public Value<T> getMin() {
return min;
}


public int getCount() {
return count;
}


}



public class Test {


public static void main(String[] args) {
DataSet<Integer> dataSet = new DataSet<>();
dataSet.add(() -> 1);
dataSet.add(() -> 6);
dataSet.add(() -> -2);
dataSet.add(() -> 5);
dataSet.add(() -> -3);
dataSet.add(() -> 22);
System.out.println("Max : " + dataSet.getMax().get());
System.out.println("Min : " + dataSet.getMin().get());
}


}