// ÐмпоÑÑиÑÑем нÑжнÑе инÑÑÑÑменÑÑ Ð¸Ð· ÑÑандаÑÑной библиоÑеки Java. // Scanner - Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° полÑзоваÑелÑ. // InputMismatchException - Ð´Ð»Ñ Ð¾Ñлова оÑибки, еÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ´ÐµÑ ÑекÑÑ Ð²Ð¼ÐµÑÑо ÑиÑла. import java.util.InputMismatchException; import java.util.Scanner; public class Main { // ÐÑо главнÑй меÑод, ÑоÑка Ð²Ñ Ð¾Ð´Ð° в пÑогÑаммÑ. Ðн вÑполнÑеÑÑÑ Ð¿Ñи запÑÑке. public static void main(String[] args) { // --- ÐодгоÑовиÑелÑнÑй ÑÑап --- // Создаем обÑÐµÐºÑ 'ÑканеÑ', коÑоÑÑй бÑÐ´ÐµÑ ÑлÑÑаÑÑ ÐºÐ¾Ð½ÑÐ¾Ð»Ñ Ð¸ ÑиÑаÑÑ Ñо, ÑÑо Ð²Ð²Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. // System.in - ÑÑо ÑÑандаÑÑнÑй поÑок ввода, Ñо еÑÑÑ, как Ñаз, конÑолÑ. Scanner userInputScanner = new Scanner(System.in); // Создаем обÑÐµÐºÑ Ð½Ð°Ñей гонки. Ðн бÑÐ´ÐµÑ Ñ ÑаниÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ лидеÑе. Race leMans24 = new Race(); // Ðо ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð·Ð°Ð´Ð°Ñи Ñ Ð½Ð°Ñ 3 маÑинÑ. ЧÑÐ¾Ð±Ñ Ð½Ðµ пиÑаÑÑ "магиÑеÑкое ÑиÑло" 3 неÑколÑко Ñаз, // Ñоздадим конÑÑанÑÑ. ÐÑли вдÑÑг Ð·Ð°Ñ Ð¾Ñим Ð³Ð¾Ð½ÐºÑ Ð½Ð° 5 маÑин, поменÑем ÑолÑко ÑÑо знаÑение. final int numberOfCars = 3; // ÐÑивеÑÑÑвÑем полÑзоваÑелÑ, ÑÑÐ¾Ð±Ñ Ð±Ñло понÑÑно, ÑÑо пÑогÑамма запÑÑÑилаÑÑ. System.out.println("ÐобÑо пожаловаÑÑ Ð½Ð° Ð³Ð¾Ð½ÐºÑ '24 ÑаÑа Ðе-Ðана'!"); System.out.println("--------------------------------------------"); // --- ÐÑновной Ñикл Ð´Ð»Ñ ÑбоÑа даннÑÑ --- // Ðам нÑжно ÑпÑоÑиÑÑ Ð¿Ñо 3 маÑинÑ. ÐÐ»Ñ Ð¿Ð¾Ð²ÑоÑÑÑÑÐ¸Ñ ÑÑ Ð´ÐµÐ¹ÑÑвий идеалÑно Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸Ñ Ñикл for. // Цикл бÑÐ´ÐµÑ ÑабоÑаÑÑ, пока ÑÑеÑÑик 'i' не ÑÑÐ°Ð½ÐµÑ Ð±Ð¾Ð»ÑÑе колиÑеÑÑва маÑин. for (int i = 1; i <= numberOfCars; i++) { System.out.println(); // ÐобавлÑем пÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÐºÑаÑоÑÑ. // --- Ðлок ввода Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÑÐ¸Ð½Ñ Ñ Ð¿ÑовеÑкой --- String carName; while (true) { // ÐÑполÑзÑем "беÑконеÑнÑй" Ñикл, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑаÑиваÑÑ Ð²Ð²Ð¾Ð´, пока он не бÑÐ´ÐµÑ ÐºÐ¾ÑÑекÑнÑм. System.out.println("â ÐведиÑе название маÑÐ¸Ð½Ñ â" + i + ":"); carName = userInputScanner.nextLine(); // ЧиÑаем вÑÑ Ð²Ð²ÐµÐ´ÐµÐ½Ð½ÑÑ ÑÑÑокÑ. // ÐÑовеÑка: название не должно бÑÑÑ Ð¿ÑÑÑÑм. // .trim() ÑбиÑÐ°ÐµÑ ÑлÑÑайнÑе пÑÐ¾Ð±ÐµÐ»Ñ Ð² наÑале и конÑе ÑÑÑоки. // .isEmpty() пÑовеÑÑеÑ, не оÑÑалаÑÑ Ð»Ð¸ ÑÑÑока пÑÑÑой поÑле ÑÑого. if (carName != null && !carName.trim().isEmpty()) { break; // ÐÑли название коÑÑекÑное, вÑÑ Ð¾Ð´Ð¸Ð¼ из беÑконеÑного Ñикла. } else { System.out.println("Ðазвание маÑÐ¸Ð½Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑÑм. ÐожалÑйÑÑа, попÑобÑйÑе Ñнова."); } } // --- Ðлок ввода ÑкоÑоÑÑи маÑÐ¸Ð½Ñ Ñ Ð¿ÑовеÑкой --- int carSpeed; while (true) { // ÐÑе один "беÑконеÑнÑй" Ñикл, ÑепеÑÑ Ð´Ð»Ñ ÑкоÑоÑÑи. System.out.println("â ÐведиÑе ÑкоÑоÑÑÑ Ð´Ð»Ñ '" + carName + "' (км/Ñ):"); /* * Я ÑÑолкнÑлÑÑ Ñ Ð¿Ñоблемой: еÑли Ð´Ð»Ñ ÑкоÑоÑÑи ввеÑÑи не ÑиÑло, а ÑекÑÑ, * пÑогÑамма "падала" Ñ Ð¾Ñибкой. Я наÑал иÑкаÑÑ Ð² инÑеÑнеÑе, как можно пÑовеÑиÑÑ, * ÑÑо полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» именно ÑиÑло, и наÑел ÑеÑение Ñ ÐºÐ¾Ð½ÑÑÑÑкÑией "try-catch". * ÐÑ "пÑобÑем" (try) вÑполниÑÑ ÐºÐ¾Ð´, * и еÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка, Ð¼Ñ ÐµÐµ "ловим" (catch) и обÑабаÑÑваем, не Ð´Ð°Ð²Ð°Ñ Ð¿ÑогÑамме завеÑÑиÑÑÑÑ. * * ÐаÑем Ñ Ð¾Ð±Ð½Ð°ÑÑжил вÑоÑÑÑ Ð¿ÑоблемÑ: поÑле ввода ÑекÑÑа пÑогÑамма Ð²Ñ Ð¾Ð´Ð¸Ð»Ð° в беÑконеÑнÑй Ñикл * и поÑÑоÑнно вÑводила ÑообÑение об оÑибке. Я наÑÑл, ÑÑо ÑÑо оÑобенноÑÑÑ * ÑабоÑÑ Scanner: он не ÑаÑÐ¿Ð¾Ð·Ð½Ð°ÐµÑ Ð½ÐµÐ²ÐµÑнÑй ввод. ЧÑÐ¾Ð±Ñ ÑÑо иÑпÑавиÑÑ, нÑжно пÑинÑдиÑелÑно * ÑÑиÑаÑÑ Ð¾ÑÑавÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ scanner.nextLine(). * * Ðлок "finally" гаÑанÑиÑÑеÑ, ÑÑо ÑогÑамма оÑÑабоÑÐ°ÐµÑ Ð² лÑбом ÑлÑÑае: и пÑи * ÑÑпеÑном вводе, и пÑи оÑибке. Ðне показалоÑÑ, Ñак бÑÐ´ÐµÑ Ð»ÑÑÑе! */ try { // "ÐÑÑаемÑÑ" пÑоÑиÑаÑÑ Ñелое ÑиÑло. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð¾ÑибкÑ, еÑли введÑÑ ÑекÑÑ. carSpeed = userInputScanner.nextInt(); // ÐÑли ÑиÑло ÑÑпеÑно пÑоÑиÑано, пÑовеÑÑем, Ð²Ñ Ð¾Ð´Ð¸Ñ Ð»Ð¸ оно в Ð½Ð°Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ (Ð¾Ñ 1 до 250). if (carSpeed > 0 && carSpeed <= 250) { break; // ÐÑли вÑе пÑовеÑки пÑойденÑ, вÑÑ Ð¾Ð´Ð¸Ð¼ из Ñикла. } else { // ÐÑли ÑиÑло не в диапазоне, ÑообÑаем об ÑÑом. System.out.println("â ÐепÑавилÑÐ½Ð°Ñ ÑкоÑоÑÑÑ. СкоÑоÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð±Ð¾Ð»ÑÑе 0 и не более 250 км/Ñ."); } } catch (InputMismatchException e) { // "Ðовим" оÑибкÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» не ÑиÑло (напÑимеÑ, "abc"). System.out.println("â ÐÑибка ввода. ÐожалÑйÑÑа, введиÑе Ñелое ÑиÑло, а не ÑекÑÑ."); } finally { // ÐÑÐ¾Ñ Ð±Ð»Ð¾Ðº вÑполнÑеÑÑÑ ÐСÐÐÐÐ: и поÑле ÑÑпеÑного ввода, и поÑле оÑибки. // nextLine() здеÑÑ Ð½Ñжен, ÑÑÐ¾Ð±Ñ "оÑиÑÑиÑÑ" ÑканеÑ. ÐоÑле nextInt() в бÑÑеÑе оÑÑаеÑÑÑ // Ñимвол пеÑеноÑа ÑÑÑоки, и без ÑÑой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑледÑÑÑий ввод Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÑÐ¸Ð½Ñ ÑломаеÑÑÑ. userInputScanner.nextLine(); } } // --- Создание обÑекÑа и пеÑедаÑа его в Ð³Ð¾Ð½ÐºÑ --- // ТепеÑÑ, когда Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¿ÑовеÑеннÑе название и ÑкоÑоÑÑÑ, Ñоздаем обÑÐµÐºÑ Ð¼Ð°ÑинÑ. Car currentCar = new Car(carName, carSpeed); // ÐÑпÑавлÑем ÑозданнÑÑ Ð¼Ð°ÑÐ¸Ð½Ñ Ð² Ð½Ð°Ñ Ð¾Ð±ÑÐµÐºÑ Ð³Ð¾Ð½ÐºÐ¸, ÑÑÐ¾Ð±Ñ Ð¾Ð½ опÑеделил, не новÑй ли ÑÑо лидеÑ. leMans24.processNewContender(currentCar); } // --- ÐÑвод ÑезÑлÑÑаÑов --- // Цикл законÑилÑÑ, вÑе даннÑе ÑобÑанÑ. ÐбÑÑвлÑем победиÑелÑ. System.out.println("\n============================================"); System.out.println("Ðонка завеÑÑена! Ðодводим иÑоги..."); // ÐолÑÑаем Ð¸Ð¼Ñ Ð¿Ð¾Ð±ÐµÐ´Ð¸ÑÐµÐ»Ñ Ð¸Ð· обÑекÑа гонки. String winner = leMans24.getWinnerName(); // ÐÑовеÑÑем, еÑÑÑ Ð»Ð¸ Ñ Ð½Ð°Ñ Ð²Ð¾Ð¾Ð±Ñе победиÑÐµÐ»Ñ (вдÑÑг, вÑе ввели ÑкоÑоÑÑÑ 0). if (!winner.isEmpty()) { System.out.println("Ð¡Ð°Ð¼Ð°Ñ Ð±ÑÑÑÑÐ°Ñ Ð¼Ð°Ñина: " + winner); } else { System.out.println("ÐобедиÑÐµÐ»Ñ Ð¾Ð¿ÑеделиÑÑ Ð½Ðµ ÑдалоÑÑ."); } // РконÑе пÑогÑÐ°Ð¼Ð¼Ñ Ð·Ð°ÐºÑÑваем ÑканеÑ. userInputScanner.close(); } }