題目:
принтер
Создайте класс и продемонстрируйте правильные методы инкапсуляции
класс будет называться Printer
Он будет имитировать настоящий компьютерный принтер.
В нем должны быть поля для уровня тонера, количества напечатанных страниц и
также является ли это двусторонним принтером (способным печатать на обеих сторонах бумаги).
Добавить способы заправки тонера (максимум до 100%),
другой метод имитации печати страницы (который должен увеличить количество напечатанных страниц).
Определите область действия, следует ли использовать конструкторы и все остальное, что, по вашему мнению, необходимо.
Инкапсуляция
В этом упражнении вы создадите один класс и назовете его Printer.
Этот класс будет иметь две переменные-члены типа int, tonerLevel и pagesPrinted, а также одну переменную логического типа, называемую duplex.
Все три поля будут иметь приватный доступ.
Конструктор примет две из этих переменных, tonerLevel и duplex, в качестве параметров, следующих следующим правилам:
- tonerLevel должен быть больше -1, но меньше или равен 100. Если он не соответствует этим условиям, его следует инициализировать до -1.
- duplex должен быть инициализирован значением параметра.
Кроме того, pagesPrinted должен быть инициализирован равным 0.
Три других метода должны быть определены таким образом:
- addToner принимает один параметр tonerAmount типа int. Во-первых, значение tonerAmount должно быть больше 0 и меньше или равно 100. Если это условие выполняется, необходимо включить второй тест, чтобы проверить, больше ли значение tonerLevel плюс tonerAmount 100. Если это так, метод должен возвращать -1. Если нет, то tonerLevel должен иметь добавленное входящее значение tonerAmount, а затем метод должен возвращать новое значение tonerLevel. Кроме того, если проверка начального условия не пройдена, метод должен вернуть -1.
- printPages примет один параметр, страницы типа int. Необходимо создать переменную с именем pagesToPrint и инициализировать ее значением входящего параметра. Следует выполнить условную проверку того, является ли поле класса принтера, дуплекс, «истинным» или «ложным». Если установлено значение «true», необходимо выполнить расчет для определения количества страниц, необходимых для двусторонней печати задания. Затем значение pagesToPrint добавляется к полю класса pagesPrinted, но метод должен возвращать значение pagesToPrint.
- getPagesPrinted не имеет параметров и просто возвращает значение переменной-члена pagesPrinted.
Пример ввода:
Printer printer = new Printer(50, true);
System.out.println(printer.addToner(50));
System.out.println("initial page count = " +printer.getPagesPrinted());
int pagesPrinted = printer.printPages(4);
System.out.println("Pages printed was " + pagesPrinted +" new total print count for printer = " +printer.getPagesPrinted());
pagesPrinted = printer.printPages(2);
System.out.println("Pages printed was " + pagesPrinted +" new total print count for printer = " +printer.getPagesPrinted());
Пример вывода:
100
initial page count = 0
Printing in duplex mode
Pages printed was 2 new total print count for printer = 2
Printing in duplex modePages printed was 1 new total print count for printer = 3
Советы:
- Не забудьте вставить только код из класса Printer в оценщик упражнений. Класс Main не нужно вставлять.
- Вы можете включить сообщение в метод printPages, которое информирует пользователя о том, что принтер печатает в дуплексном режиме, если дуплекс равен «true», если хотите.
- При расчете pagesToPrint, если дуплекс равен «true», помните, что есть два оператора, которые могут помочь вам в этом. Оператор деления «/» делит число и возвращает только частное без остатка. А оператор по модулю «%» делит число и возвращает только остаток, будь то 0 или что-то другое.
參考答案:
Принтер
public class ChallengePrinter { private int tonerLevel; private int numberOfPagePrinted; private boolean duplexPrinter;
public ChallengePrinter(int tonerLevel, boolean duplexPrinter) { if (tonerLevel > 0 && tonerLevel <= 100) { this.tonerLevel = tonerLevel; } else { this.tonerLevel = 100; } this.numberOfPagePrinted = 0; this.duplexPrinter = duplexPrinter; if(duplexPrinter){ System.out.println("Duplex mode on, double side be printed"); } }
public void fillUp() { tonerLevel = 100; System.out.println("Start fill up."); System.out.println("tonerLevel is 100 full now."); }
public void print(double page) { if (page <= tonerLevel) { tonerLevel -= page; if (isDuplexPrinter()) { numberOfPagePrinted += Math.ceil(page / 2);
} else { numberOfPagePrinted += page; } System.out.println("--- Start print ---"); System.out.println(getNumberOfPagePrinted() + " total page be printed."); System.out.println("toner level now left: " + getTonerLevel()); System.out.println("--- Done ---\n"); if (getTonerLevel() == 0){ System.out.println("Toner level is 0 plz fill up."); } } else { System.out.println("Toner level is not enough" + getTonerLevel() + "plz fill up."); }
}
public int getTonerLevel() { return tonerLevel; }
public int getNumberOfPagePrinted() { return numberOfPagePrinted; }
public boolean isDuplexPrinter() { return duplexPrinter; } }
Инкапсуляция
public class Printer { private int tonerLevel; private int pagesPrinted; private boolean duplex;
public Printer(int tonerLevel, boolean duplex) { if (tonerLevel > -1 && tonerLevel < 100) { this.tonerLevel = tonerLevel; } else { this.tonerLevel = -1; } this.duplex = duplex; pagesPrinted = 0; }
public int addToner(int tonerAmount) { if (tonerAmount > 0 && tonerAmount < 100) { if (tonerLevel + tonerAmount > 100) { return -1; } tonerLevel += tonerAmount; return tonerLevel; } return -1; }
public int printPages(int pages) { int pagesToPrint = pages; if (duplex) { pagesToPrint = (pagesToPrint / 2) + (pagesToPrint % 2); } pagesPrinted += pagesToPrint; return pagesToPrint; }
public int getPagesPrinted() { return pagesPrinted; } }