ورود

View Full Version : دیباگ کردن برنامه جاوا ( نسبتان ساده )



haftasia
چهارشنبه 19 فروردین 1394, 13:22 عصر
دوستان این برنامه مشکل داره اگه ممکنه دیباگ کنید

این برنامه نمرات چهار درس از سه دانش اموز رو تو ارایه گرفتیم و قراره حداقل وحداکثر نمره و میانگین نمرات برای هر دانش اموز نمایش داده بشه

برنامه شو نوشتم ولی تو محاسبات اشتباه کردم . اگر ممکنه راهنمایی کنید.
ممنون

import java.awt.*;
import javax.swing.*;


public class lastArray extends JApplet {

int grades[][] = { {20,15,11,12},
{10,13,12,16},
{17,16,14,18} };

int student = grades.length;
int exams = grades[0].length;
String output = "The Grades Of Studens is : \n";
int avg;
JTextArea outputArea;


public void init(){

outputArea = new JTextArea();
Container container = getContentPane();
container.add( outputArea );

output += "\nNumber of student\tMinimum Grade\tMaximum Grade\tAvrage Grades\n ";

for(int i=0 ; i<student ; i++){

output += "\nStudent "+(i+1)+" Is : \t\t"+minGrade(i)+"\t\t"+maxGrade(i)+"\t\t"+avrgGrade(i);

}

outputArea.setText(output);
}

public int minGrade(int c){

for(int j=0 ; j<exams ; j++){
if(grades[c][j]<grades[c][j+1]){
int b=grades[c][j];
return b;
}
}

return 0 ;
}
public int maxGrade(int c){



for(int j=0 ; j<exams ; j++){
if(grades[c][j]>grades[c][j+1]){
int b = grades[c][j];
return b;
}
}


return 0;
}
public int avrgGrade(int c){

for(int j=0 ; j<exams ; j++){
avg += grades[c][j];

}
return (avg/exams);



}
}

Raminab
چهارشنبه 19 فروردین 1394, 15:50 عصر
سلام
اینجوری درست کار میکنه خودت نگاه کن ببین چه فرقایی داره بعد اگه کمک خواستی بگو



package barnamenevisProblem;


import java.awt.*;
import javax.swing.*;


public class lastArray extends JApplet {


int grades[][] = { { 20, 15, 11, 12 }, { 10, 13, 12, 16 },
{ 17, 16, 14, 18 } };


int student = grades.length;
int exams = grades[0].length;
String output = "The Grades Of Studens is : \n";
double avg;
JTextArea outputArea;


public void init() {


outputArea = new JTextArea();
Container container = getContentPane();
container.add(outputArea);


output += "\nNumber of student\tMinimum Grade\tMaximum Grade\tAvrage Grades\n ";


for (int i = 0; i < student; i++) {


output += "\nStudent " + (i + 1) + " Is : \t\t" + minGrade(i)
+ "\t\t" + maxGrade(i) + "\t\t" + avrgGrade(i);


}


outputArea.setText(output);
}


public int minGrade(int c) {
int min = 21;
for (int j = 0; j < exams; j++) {
if (grades[c][j] < min) {
min = grades[c][j];
}
}


return min;
}


public int maxGrade(int c)
{
int max = -1;
for (int j = 0; j < exams; j++)
{
if (grades[c][j] > max) {
max = grades[c][j];
}
}


return max;
}


public double avrgGrade(int c)
{
avg = 0;
for (int j = 0; j < exams; j++) {
avg += grades[c][j];


}
return (avg / exams);


}
}

haftasia
چهارشنبه 19 فروردین 1394, 20:47 عصر
بسیار ممنون از شما ، مشکل برطرف شد اما نمیفهم چطوری !!! متغیر هایی که تعریف شده طوری هستند که همیشه شرط برقراره و هر دفعه هر متغییری رو داخل خودش ذخیره میکنه ولی چطور خواسته ی ما رو انجام میده نمیدونم !!!!



public int minGrade(int c) {
int min = 21;
for (int j = 0; j < exams; j++) {
if (grades[c][j] < min) {
min = grades[c][j];
}
}


return min;
}


public int maxGrade(int c)
{
int max = -1;
for (int j = 0; j < exams; j++)
{
if (grades[c][j] > max) {
max = grades[c][j];
}
}

Raminab
چهارشنبه 19 فروردین 1394, 22:07 عصر
توی اولین مرحله ی پیمایش حلقه ی minGrade متغیر min مقدار جدید میگیره چون هر نمره ای کمتر از 21 هستش!(میتونستید از ماکرو هم استفاده کنید Integer.MAX_INT) ازون به بعد دیگه متغیر min مقدار 21 رو نداره! همینطور حلقه پیمایش میشه و در صورتی که خونه ی بعدی آرایه مقدار کمتری داشته اون توی min ذخیره میشه.

توی قسمت معدل گیری هم چون avg خارج از تابع تعریف شده با ورود به تابع مقدار قبلیش رو از دست نمیداد که باید در شروع صفر بشه.

haftasia
چهارشنبه 19 فروردین 1394, 23:42 عصر
من تازه کار هستم نمیدونم ماکرو چیه ! اگه ممکنه توضیح بدید

محمد فدوی
پنج شنبه 20 فروردین 1394, 02:11 صبح
... (میتونستید از ماکرو هم استفاده کنید Integer.MAX_INT) ...
فکر می‌کنم منظورتون از ماکرو، ثابت بود. چون جاوا چیزی به اسم ماکرو نداره. همچنین Integer.MAX_INT هم وجود نداره. ثابتی که بزرگترین مقدار int رو توی خودش داره Integer.MAX_VALUE هست.
ماکروهایی که احتمالا منظور شما بود، مختص سی و سی‌پلاس‌پلاس هست و یه اعلان بیش پردازنده‌ست (Preproccessor). برای مثال:


#define PI 3.1415
#define E 2.71
#define ABS(x) ((x) >= 0 ? (x) : -(x))


دستورات پیش پردازنده به طور کلی از جاوا حذف شدن و به جای ماکرو‌های ثابت (مثل PI و E در بالا) باید از ثوابت و به جای ماکرو‌های با آرگومان (مثل ABS در بالا) باید از متدهای استاتیک در جاوا استفاده کرد، یعنی مثلا:

public class MyMath {
public static final double PI = 3.1415;
public static final double E = 2.71;

public static double abs(double x) {
return x >= 0 ? x : -x;
}
}



من تازه کار هستم نمیدونم ماکرو چیه ! اگه ممکنه توضیح بدید
همونطور که گفتم جاوا چیزی به اسم ماکرو نداره. Integer.MAX_VALUE یه ثابته که بیشترین مقدار عددی ممکن برای یه متغیر از نوع int رو تو خودش داره که برابره با: ۲ به توان ۳۱ منهای یک
مشکل متد minGrade در برنامه‌ی شما این بود که شما در واقع کمترین نمره رو پیدا نمی‌کردید. شما اولین نمره‌ای رو پیدا می‌کردید که از بعدیش کمتر باشه! یعنی مثلا اگه نمرات وارد شده به ترتیب ۱۸، ۱۴، ۱۷ و ۸ باشن، برنامه‌ی شما ۱۴ رو پیدا می‌کرد که اولین نمره‌ای بود که از بعدی خودش (یعنی ۱۷) کمتر بود. مشکل مشابهی هم در مورد متد maxGrade وجود داشت که اصلاح شدن.
موفق باشید.