Java/שיטות/תרגילים

שיטות פשוטות עריכה

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

פתרון
public class Methods {

	// Print the given name
	public static void printName(String s) {
		System.out.println("My name is "+s);
	}
	
	// Main method
	public static void main(String[] args) {
		printName("Gizmo");
	}
}

שם המשתנה שהשיטה מקבלת אינו name אלא s. זה לא משנה: השיטה מצפה לקבל משתנה מסוג String וההשפעה היחידה שיש לשם המשתנה שבכותרת תהייה שבתוך השיטה נצטרך לקרוא למשתנה בעזרת השם בו השתמשנו.


כתבו שיטה נוספת, connectName(String first, String last) המקבלת שם פרטי ושם משפחה, ומחזירה את השם מחובר (כלומר, מחרוזת שמורכבת מהשם הפרטי ושם המשפחה, מופרדים ברווח). שנו את השיטה printName כך שתקבל שם פרטי ושם משפחה, והשתמשו בשיטה החדשה שכתבתם כדי לחבר את השם למחרוזת אחת ולהדפיסו. שנו גם את ה-main בהתאם. התוכנית לא זקוקה ל-main בן יותר משורה אחת כדי לעבוד.

פתרון
public class Methods {

	// Connect first and last name
	public static String connectName(String first, String last) {
		String fullName = first + " " + last;
		return fullName;
	}
	// Print the given name
	public static void printName(String first, String last) {
		String fullName = connectName(first, last);
		System.out.println("My name is "+fullName);
	}
	
	// Main method
	public static void main(String[] args) {
		printName("Eddie","Niceguy");
	}
}


משחק הניחושים עריכה

נבנה כעת משחק פשוט: המחשב מגריל מספר, ועל השחקן לנחש אותו בכמה שפחות מהלכים. נתחיל מהסוף: כתבו שיטה המקבלת את מספר הניחושים של השחקן עד כה, ומדפיסה לשחקן הודעה שניצח, וכן את מספר הפעמים ששיחק עד שניצח.

פתרון
	// Report winning the game
	public static void reportWin(int guessCounter) {
		System.out.println("Hooray, you win! It took you "+guessCounter+" attemps");
	}

נמשיך מההתחלה: כתבו שיטה היוצרת מספר אקראי מסוג int, שיהיה הניחוש של המחשב, ומחזירה אותו. הטווח של המספר יהיה בין 1 למשתנה קבוע שנקרא RANGE, אותו עדיין לא הגדרנו. אם אינכם זוכרים כיצד ליצור מספר אקראי, הציצו בתרגילי הפרק הקודם.

פתרון
	// Generate a number between 1 an the max range
	public static int generateNumber() {
		return (int) (1+Math.random()*RANGE);
	}

כעת, כתבו שיטה שמבקשת מהשחקן להכניס ניחוש, קולטת את הניחוש, ומחזירה אותו.

פתרון
	// Read the number from the player
	public static int readGuess() {
		Scanner s = new Scanner(System.in);
		System.out.print("Enter your guess: ");
		int guess = s.nextInt();
		return guess;		
	}

כתבו שיטה המקבלת את ניחושו של השחקן ואת המספר אותו ניחש המחשב ובודקת אם אכן הצליח השחקן לנחש את המספר. אם כן - תחזיר השיטה true. אם לא, תדפיס השיטה הודעה מתאימה: גדול מדי/קטן מדי, ותחזיר false.

פתרון
	// Report: Too big, too small, or bingo
	public static boolean report(int guess, int compNumber) {
		if(guess == compNumber) {
			return true;
		}
		else {
			if(guess < compNumber) {
				System.out.println("Your guess is too small!");
			}
			else {
				System.out.println("Your guess is too big!");
			}
			return false;
		}
	}

כל שנשאר כעת הוא לחבר את הכל: כתבו פונקציית main מתאימה (או שיטה אחרת, שתיקרא מ-main), והגדירו את המשתנה הקבוע RANGE. מהלך המשחק הוא פשוט מאוד: לאחר שהמחשב בוחר מספר, הוא שואל את השחקן מהו ניחושו. בתגובה לניחוש ידפיס המחשב הודעה מתאימה - גדול מדי/קטן מדי, או הודעת ניצחון. התוכנית תסתיים רק כשהשחקן יצליח לנחש את המספר הנכון.

פתרון
import java.util.Scanner;

public class GuessGame {

	public static final int RANGE = 500;
	
	// Generate a number between 1 an the max range
	public static int generateNumber() {
		return (int) (1+Math.random()*RANGE);
	}
	
	// Read the number from the player
	public static int readGuess() {
		Scanner s = new Scanner(System.in);
		System.out.print("Enter your guess: ");
		int guess = s.nextInt();
		return guess;		
	}
	
	// Report: Too big, too small, or bingo
	public static boolean report(int guess, int compNumber) {
		if(guess == compNumber) {
			return true;
		}
		else {
			if(guess < compNumber) {
				System.out.println("Your guess is too small!");
			}
			else {
				System.out.println("Your guess is too big!");
			}
			return false;
		}
	}
	
	// Report winning the game
	public static void reportWin(int guessCounter) {
		System.out.println("Hooray, you win! It took you "+guessCounter+" attemps");
	}
	
	// Main method
	public static void main(String[] args) {
		int myNum = generateNumber();
		boolean gameWon = false;
		int counter = 0;
		while(!gameWon) {
			counter++;
			int guess = readGuess();
			gameWon = report(guess, myNum);
		}
		reportWin(counter);
	}
}


 

אתגר:

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