עזרה ביישום מחלקה 1 בשנייה . גאווה . - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה ביישום מחלקה 1 בשנייה . גאווה .


Dror Arasheven

Recommended Posts

כתבתי שתי מחלקות לאיזה קורס . הראשונה יצאה חלק . השנייה אני מתקשה ליצור מתודות המשתמשות במחלקה הראשונה 

יצירת פריט

public class product {
	
	public static void clearscreen() {
		System.out.print('\u000c');
	}
	private String name;
	private int amount;
	private double price; // the price is for 1 amount 
	public String tostring(){
	return amount + " " + name + " " + amount*price;
	}
	public void setname (String x){
	name=x;	
	}
	public String getname (){
		return name;
	}
	public void setamount (int x) {
	if (x>1)  amount=x;
	else	amount=1;
	}
	public int getamount () {
		return amount;
	}
	public void setprice (double x) {
		if (x>0) price=x;
		else price=0;
	}
	public double getprice () {
		return price ;
	}
	public product () {
		name=null;
		amount=1;
		price=0;
	}
	public product (String x,double y) {
		name=x;
		amount=1;
		price=y;
	}
	public product (String x, int y, double z) {
		name=x;
		amount=y;
		price=z;
	}
	public product (product other) {
		name=other.name;
		amount=other.amount;
		price=other.price;
	}
	
}

קופה רושמת


public class cashbox {
	public static void claerscreen () {
		System.out.print ("\u000c");
	}
	private product[] productarry;
	private int n=0;
	private double totalsum;
	public cashbox () {
		productarry=new product[n];
	}
	public boolean addproduct (String name,int amount,double price) {
		if (amount>1){
			productarry[n]=new product ( name, amount, price);
			n++;
			return true;
		}
		if(!(amount>1)){
				productarry[n]=new product (name, price);
				n++;
				return true;
			}
			return false;
		}
	public  product tostring(){
		for (int i=0;i<n;){
			return productarry[i];
		}
		return null;
	}
	public double sum(double price,int amount){
		double x=0;
			for (int i=0;i<n;i++){
				x+=price*amount;
			}
			return x;
	}
	public double paymant (double paymant) {
		double change=paymant-sum(product[]);
		totalsum+=sum(product[]);
		n=0;
		productarry[0]=new product ();
		return change;
	}
	public String tostring(){
		return totalsum;
		}
}

המחלקה של הקופה יצרתי מערך הקולט פריטים , מדפיס את תכולת המערך סוכם אותם ומחזירה את ערך שהצטבר בקופה .

השאלות שלי הם: בפריט מוצר רשמתי מתודה המאפשרת הדפסת תכולת המחלקה . בקופה רשמתי אותה 1 המריצה לולאה ומחזירה את הפריטים במערך . השאלה היא אם אני נותן פקודת הדפסה על המערך אז הוא יפעיל לי את הפקודה בתוך המחלקה . במחלקות של חישוב הסכום המערך וחישוב העודף די נתקעתי . אני חושב שיהיה לי שגיאת ריצה כאן . יש למישהו רעיונות איך לתקן את זה ? או דרך לעקוף את הצורך להכליל מחלקה 1 בשנייה בעת ישומה במחלקה הראשית . שגיאות שלא שמתי לב וצריך לתקן יתקבלו בברכה .... (המחלקה השניה היא עדיין בתהליך עבודה .... ואני עדיין צריך לכתוב תוכנית המיישמת את 2 המחלקות)

קישור לתוכן
שתף באתרים אחרים

השימוש שלך במערכים לא נכון. למערך יש גודל קבוע - כשאתה מגדיר כזה דבר:

productarry = new product[n];

אז התוכנה לוקחת את הערך של n באותו רגע ויוצרת מערך בגודל הזה. אם אתה משנה את n אחרי זה אז הגודל של המערך לא ישתנה. במקרה שלך, זה ייצור מערך בגודל 0 (כי זה הגודל של n בהתחלה) ואז לא תוכל בכלל לשים בו כלום.

בשביל לפתור את הבעיה אתה יכול לעשות אחד משלושה דברים:

1. להגדיר מראש מערך בגודל קבוע, ולהניח שלעולם לא תצטרך יותר מהגודל הזה. לדוגמה פשוט תיצור מערך בגודל 1000 (במקום n).

2. כשאתה רוצה להגדיר את המערך, תיצור מערך חדש בגודל המתאים ותעתיק אליו את התוכן של המערך הקודם.

3. לא להשתמש במערך אלא ב-ArrayList. אם אתה לא יודע מה זה אומר, אז לא משנה - אתה תלמד את זה בהמשך.

 

חוץ מזה, שים לב לאותיות גדלות וקטנות. לפונקציה tostring לדוגמה אין בג'אווה שום משמעות - השם הנכון אם toString. בדומה לכך, יש קונבנציות לגבי שמות של מחלקות ופונקציות, לדוגמה בשם של מחלקה כל מילה צריכה להתחיל באות גדולה (כלומר Product במקום product) ובשם של משתנים ופונקציות, כל מילה פרט לראשונה צריכה להתחיל באות גדולה (לדוגמה getAmount במקום getamount).

 

עוד כמה בעיות:

הגדרת שתי פונקציות שונות בשם tostring במחלקה cashbox.

בפונקציה tostring הראשונה אתה עושה return בתוך הלולאה. אפשר לעשות רק פעם אחת return בפונקציה - ברגע שמגיעים ל-return, הפונקציה מסתיימת. יש משמעות ליותר מ-return אחד רק במקרה שיש לך if.

לא ברור לי מה המשמעות של הפונקציה sum ולמה אתה משתמש בה איך שאתה משתמש בה.

 

קישור לתוכן
שתף באתרים אחרים

ציטוט של שניצל

במערך

הפונקציה sum צריכה לסכום את סך המחיר של הפריטים בתוך המערך, כלומר כול פריט היא כופלת את מחירו בכמות הפריטים וסוכמת אותם . והיא מחזירה את התוצאה הסופית . (עוד לא נגעתי בה)

עשיתי תיקונים קלים .

import java.util.ArrayList;

public class cashbox {
	public static void claerscreen () {
		System.out.print ("\u000c");
	}
	private ArrayList<product> productarry;
	private int n=0;
	private double totalsum;
	public cashbox () {
		productarry=new ArrayList<product>(n);
	}
	public boolean addproduct (String name,int amount,double price) {
		if (amount>1){
			productarry.add( name, amount, price);
			return true;
		}
		if(!(amount>1)){
			productarry=new ArrayList<product> (name, price);
				return true;
			}
			return false;
		}
	public  product print(int n){
		if (n=productarry.size())
			return productarry(n)+print(n+1);
		else
			return productarry(n);
	}
	public double sum(double price,int amount){
		double x=0;
			for (int i=0;i<n;i++){
				x+=price*amount;
			}
			return x;
	}
	public double paymant (double paymant) {
		double change=paymant-sum(product[]);
		totalsum+=sum(product[]);
		n=0;
		productarry[0]=new product ();
		return change;
	}
	public double totalsum(){
		return totalsum;
		}
}

היא מחזירה לי שגיאות ב addproduct ובprint

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...