View Full Version : مشکل در تعریف یک کلاس
AVR programmer
یک شنبه 02 خرداد 1395, 20:53 عصر
برنامه دو آرایه مجزا را (با 5 عضو) می گیرد و آرایه ها را بصورت متناظر در هم ضرب می کند .و خروجی حاصلضرب را نمایش میدهد.
من برای یادگیری بیشتر برای این برنامه کلاسی تعریف کردم که کار ضرب دو آرایه را انجام بده . ولی مشکل اینجاست که نمی دونم در بازگشت چطور آرایه c را که حاصلضزب است به برنامه اصلی return کنم .
هر کاری میکنم ارور میده .
این برنامه اصلی :
package package6;
import java.util.*;
public class t6_1 {
static Scanner console = new Scanner(System.in);
public static void main(String[] args){
int[] x = new int[5];
int[] y = new int[5];
System.out.println("Enter 5 for first array :");
for (int i=0;i<5;i++){
x[i]=console.nextInt();
}
System.out.println("Enter 5 for second array :");
for (int j=0;j<5;j++){
y[j]=console.nextInt();
}
mul z = new mul();
for (int i=0;i<5;i++){
System.out.print("["+i+"] =" + z.mul(x,y)+"\t");
}
}
}
واینم کلاس mul :
package package6;
public class mul {
public void mul(int a[], int b[]) {
int[] c = new int[6];
int i;
for (i = 0; i < 5; i++) {
c[i] = a[i] * b[i];
}
}
}
[younes]
دوشنبه 03 خرداد 1395, 04:09 صبح
باید نوع بازگشتی متد mul رو از void به int[] تغییر بدهید و آرایه c رو return کنید.
AVR programmer
دوشنبه 03 خرداد 1395, 16:06 عصر
;2321678']باید نوع بازگشتی متد mul رو از void به int[] تغییر بدهید و آرایه c رو return کنید.
مشکلم همینجاست که نمی دونم با چه دستوری باید آرایه c رو برگشت بدم !
کلاس رو به صورت زیر تغییر دادم بازم ایراد میگیره :
public class mul { public int mul(int a[], int b[]) {
int[] c = new int[6];
int i;
for (i = 0; i < 5; i++) {
c[i] = a[i] * b[i];
}
return c;
}
}
[younes]
دوشنبه 03 خرداد 1395, 20:52 عصر
c از نوع int[] پس باید نوع برگشتی از متد mul رو int [] تعیین کنید نه int .
AVR programmer
دوشنبه 03 خرداد 1395, 22:24 عصر
;2321773']c از نوع int[] پس باید نوع برگشتی از متد mul رو int [] تعیین کنید نه int .
اینکارو هم کردم :
package package6;
public class mul {
public int[] mul(int a[], int b[]) {
int[] c = new int[5];
for (int i = 0; i < 5; i++) {
c[i] = a[i] * b[i];
}
return c;
}
}
جواب اعداد غریبی چاپ میکنه ! :
Enter 5 for first array :4 8 9 0 2
Enter 5 for second array :
5 8 7 9 4
[0] =[I@1f96302 [1] =[I@14eac69 [2] =[I@a57993 [3] =[I@1b84c92 [4] =[I@1c7c054
AVR programmer
چهارشنبه 05 خرداد 1395, 20:10 عصر
دوستان دیگه نظری ندارین ؟ :لبخندساده:
[younes]
پنج شنبه 06 خرداد 1395, 00:50 صبح
شما در خط 25 دارید یک آرایه رو چاپ میکنید .....
بهتره اینطور محتویات یک آرایه رو چاپ کنید:
System.out.println(Arrays.toString(variableName));
AVR programmer
پنج شنبه 06 خرداد 1395, 15:02 عصر
شما در خط 25 دارید یک آرایه رو چاپ میکنید .....
بهتره اینطور محتویات یک آرایه رو چاپ کنید:
1
System.out.println(Arrays.toString(variableName));
من نمیدونم اینکه شما گفتی رو چطوری برای یک شی (z) پیاده کنم من که هر چی زدم ارور میده
maryam.eng
دوشنبه 10 خرداد 1395, 09:42 صبح
سلام برای این خط:
for (int i=0;i<5;i++){ System.out.print("["+i+"] =" + z.mul(x,y)+"\t");
}
شما باید هر بار یک y[i],x[i]
را به تابع بدهید چون فراخوانی تایع شما در حلقه قرار دارد و درست نیست که بنویسید :mul(x,y)
AVR programmer
چهارشنبه 12 خرداد 1395, 21:35 عصر
سلام برای این خط:
for (int i=0;i<5;i++){ System.out.print("["+i+"] =" + z.mul(x,y)+"\t");
}
شما باید هر بار یک y[i],x[i]
را به تابع بدهید چون فراخوانی تایع شما در حلقه قرار دارد و درست نیست که بنویسید :mul(x,y)
ببخشید میشه دستورش رو بنویسید من که اصلا نفهمیدم منظورتون چیه:لبخند:
vahid-p
جمعه 21 خرداد 1395, 17:39 عصر
خطوط آخر رو ببینید:
static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int[] x = new int[5];
int[] y = new int[5];
System.out.println("Enter 5 for first array :");
for (int i = 0; i < 5; i++) {
x[i] = console.nextInt();
}
System.out.println("Enter 5 for second array :");
for (int j = 0; j < 5; j++) {
y[j] = console.nextInt();
}
mul z = new mul();
int[] answer = z.mul(x, y);
// System.out.println(Arrays.toString(answer)); //You can use this method instead of the following loop
for (int i = 0; i < 5; i++) {
System.out.print("[" + i + "] =" + answer[i] + "\t");
}
}
ضمنا در متد mul بهتره طول ثابت قرار ندید تا اگر بعدا خواستید از این متد در یک مثال دیگه استفاده کنید نخواید همه این موارد رو ویرایش کنید. در نتیجه:
public int[] mul(int a[], int b[]) {
int[] c = new int[Math.min(a.length, b.length)]; //Declares c with minimum length of a and b
for (int i = 0; i < Math.min(a.length, b.length); i++) {
c[i] = a[i] * b[i];
}
return c;
}
چند تا نکته در مورد نوشتن برنامه به زبان جاوا هر چند تاثیری در منطق برنامه نداره ولی یه جورایی استانداردیه که اکثرا رعایت می کنند:
1- در جاوا تا حد ممکن از اختصار در کلمات پرهیز کنید و سعی کنید اسامی تا حدودی وظیفه آن متغیر، کلاس یا متد را معرفی کند یا ذهن را به آن سمت هدایت کنه. در C/C++ بیشتر اختصار وجود داره و مثلا در سی داریم strlen ولی در جاوا برای هر رشته ای length به صورت کامل نوشته میشه.
2- اسم کلاس ها رو با حروف بزرگ شروع کنید و اول هر کلمه بعدی در همان اسم کلاس هم با حروف بزرگ. مثلا کلاس mul بهتره نوشته بشهMul و بهتر از اون با رعایت نکته اول نوشته بشه Multiplication . اگر کلاسی متشکل از چند کلمه بود مثلا binarytree بهتره نوشته بشه BinaryTree
3- اسم متدها (توابع) با حروف کوچک شروع میشن و باقی کلمات با حروف بزرگ. مثلا اگر متدی داریم به اسم matrixmultiply بهتره نوشته بشه matrixMultiply.
4- اسم متغیرها با حروف کوچک شروع میشه و مانند متد ها است و تا حد امکان از روش های C/C++ که از "_" برای جدا سازی کلمات استفاده میشه، در اینجا استفاده نشه. همون بزرگ نوشتن اول حروف کلمات بعدی چه در متغیر چه در اسم متد به خوانایی کمک بسزایی می کنه
و خیلی نکات دیگه که کم کم آشنا میشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.