ورود

View Full Version : مبتدی: شمارش تعداد تکرار کلمات



daneshjoo91
پنج شنبه 15 تیر 1391, 21:03 عصر
سوالی داشتم:آرایه ch رو از نوع string تعریف کردم و کلمات داخل یک فایل نوت پد را داخل خانه ها ی آرایهch ذخیره کردم.مثلا ch[0]=ali و ch[1]=reza و...
حالا میخوام در مورد هر کلمه ، تعداد تکرارشو بشمارم. برای اینکار یک لینک لیست یک طرفه که یک متغیر string به اسم s و یک متغیر integer به اسم val و یک اشاره گر به لینک لیست داره رو تعریف کردم تا بدین طریق تعداد تکرار کلمات رو در متغیر val و خود کلمه رو در متغیر s نگه داری کنم و قطعه کد زیر را برای شمارش نوشتم:

linklist a1 = new dochiz();
linklist a2 = new dochiz();
linklist a3 = new dochiz();
linklist a4 = new dochiz();
linklist a5 = new dochiz();
linklist a6 = new dochiz();
linklist a7 = new dochiz();
linklist a8 = new dochiz();
linklist a9 = new dochiz();
a1.next = a2;
a2.next = a3;
a3.next = a4;
a4.next = a5;
a5.next = a6;
a6.next = a7;
a7.next = a8;
a8.next = a9;
linklist t = new linklist();
int m = 0 ;
a1.s = ch[0];
m++;


for(int i = 0;i<ch.length ;i++){
t = a1;
for(int y = 0 ; y<m ; y++){
if(t.s == ch[i]){
t.val++;

break;
}
else if(t.s != ch[i]&& y==m-1){
t = t.next;
t.s = ch[i];
t.val++;
m++;

break;}
else {
t = t.next;
}
}
}
اما موقعی که میخوام تعداد تکرار یک کلمه رو چاپ کنم ، مثلا میزنم که چاپ کنه a1.val ، همه ی قسمت های قبلی برنامم تو خروجی درست چاپ میشه ولی این قسمتو ، یعنی همون چاپ a1.valرو هیچی چاپ نمی کنه و به جاش این پیغامو میده:

Exception in thread "main" java.lang.NullPointerException
at FileInput.main(FileInput.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main (AppMain.java:120)

اصلا نمی فهمم اشکال کارم کجاس و فرصت چندانی هم برای تکمیل پروژم ندارم .خواهش می کنم اگه میتونید راهنماییم کنید.
در ضمن کلاس لینک لیستمو اینجوری تعریف کردم:

public class linklist {
public int val = 0;
public String s =" ";
public linlist next;
}

spiderman200700
پنج شنبه 15 تیر 1391, 23:02 عصر
وقتی دارید به a1 و a2 و a3 و ... مقدار میدید. مقدار next در a9 مقدار نمیگیره. یعنی خودتون بهش مقدار نمیدید. احتمالا مشکل از اونجاس.

maktoom
پنج شنبه 15 تیر 1391, 23:11 عصر
سلام. می تونید یه آرایه دو بعدی بگیرید. که تعداد ستونها به اندازه حروف و دو سطر داره.(ویا ArrayList که یکی در میون پر کنید) در گام اول تعداد تکرار هر لغت رو پیدا کنید. در گام بعدی لغات تکراری رو حذف کنید.
البته اینکار از نظر پیچیدگی زمانی یه فاجعست! ولی راحته.
توی متدهای مربوط به رشته ها بگردید ممکنه چیزای بهتری پیدا کنید.