PDA

View Full Version : یه سوال خییییلی ساده



yegane8
دوشنبه 22 خرداد 1391, 00:14 صبح
سلام چرا null جاپ مبکنه چرا ؟
import java.util.HashMap;
import java.util.Scanner;
public class months{
private HashMap month;
private Scanner reader;

public months(){

month=new HashMap();
reader = new Scanner(System.in);


}
private void fillResponseMap() {
month.put("january","youarelovly");
month.put("february","you are joyful");
month.put("march","you are bad");
}
public void mounth() {
System.out.println("wich mounth you were born ?");
//Scanner m = new Scanner(System.in);
String a = reader.nextLine();
//String response = (String)month.get(a);
System.out.println((String)month.get(a));


}
}

mortezaadi
دوشنبه 22 خرداد 1391, 01:34 صبح
چون متغییر month از نوع hashmap خالیه!

برای اینکه به جواب برسی باید تابع fillResponseMap(); رو در constructor بیاری یا میدان دید تابع رو به public افزایش بدی و قبل از اینکه تابع month() صدا کنی تابع fillResponseMap(); اجرا کنی!

راه حل سریع:


public Months(){

month=new HashMap();
reader = new Scanner(System.in);
fillResponseMap();

}

yegane8
دوشنبه 22 خرداد 1391, 15:53 عصر
چون متغییر month از نوع hashmap خالیه!

برای اینکه به جواب برسی باید تابع fillResponseMap(); رو در constructor بیاری یا میدان دید تابع رو به public افزایش بدی و قبل از اینکه تابع month() صدا کنی تابع fillResponseMap(); اجرا کنی!

راه حل سریع:


public Months(){

month=new HashMap();
reader = new Scanner(System.in);
fillResponseMap();

}


مرسی راه حل اول رو فهمیدم اما دلیل اینو (میدان دید تابع رو به public افزایش بدی ) نفهمیدم میشه یه دره بیشتر نوضیح بدین

mortezaadi
جمعه 26 خرداد 1391, 13:24 عصر
مرسی راه حل اول رو فهمیدم اما دلیل اینو (میدان دید تابع رو به public افزایش بدی ) نفهمیدم میشه یه دره بیشتر نوضیح بدین

منظورم این بود که تابع fillResponseMap() را ار private به public تغییر بدید و بجای اینکه در constructor صداش کنی در جایی که با کلاس months کار میکنی صداش کنی! ( البته چون این کار encapsulation رو نقض میکنه راه خوبی نیست ولی بهت این قدرت رو میده تا هروقت دوست داری fillResponseMap() را صدا کنی.

مثلا اینطوری:

months m = new months();
m.fillResponseMap();
.
.
.


در ضمن اسم کلاس ها رو با حرف بزرگ شروع کن! Months نه months