С праздничком всех!!!

Программист, принимай поздравленья —
Поулыбчивей интерфейс,
Мы желаем тебе продвиженья
От ноля и до самых небес!
Пусть девчонка с дисплеем красивым
Мониторит с тобой до утра,
И процессор гудит на всю мощность –
Возвещают тосты юзера!

level14.lesson08.home05

Подскажите в чем проблема?

Solution

/* Computer
1. Создай интерфейс CompItem.
2. Добавь в него метод String getName().
3. Создай классы Keyboard, Mouse, Monitor, которые реализуют интерфейс CompItem.
4. Метод getName() должен возвращать имя класса, например, для класса Keyboard будет «Keyboard».
5. Создай класс Computer.
6. В класс Computer добавь приватное поле типа Keyboard.
7. В класс Computer добавь приватное поле типа Mouse.
8. В класс Computer добавь приватное поле типа Monitor.
9. Создай конструктор в классе Computer используя комбинацию клавиш Alt+Insert внутри класса (команда Constructor).
10 Внутри конструктора инициализируйте все три поля (переменных) класса
11. Создай геттеры для полей класса Computer (в классе используй комбинацию клавиш Alt+Insert и выбери команду Getter).
12. Все созданные классы и интерфейс должны быть в отдельных файлах.
*/

public class Solution
{

public static void main(String[] args)
{
Computer computer = new Computer(new Keyboard(), new Monitor(), new Mouse());
if (isWork(computer.getKeyboard()) &&
isWork(computer.getMonitor()) &&
isWork(computer.getMouse()))
{
System.out.println(«Work!»);
}
}

public static boolean isWork(CompItem item)
{
System.out.println(item.getName());
return item.getName() != null && item.getName().length() > 4;
}

}

CompItem

public interface CompItem
{
String getName();
}

Computer

public class Computer
{
private Keyboard keyboard;
private Monitor monitor;
private Mouse mouse;

public Computer(Keyboard keyboard, Monitor monitor, Mouse mouse)
{
this.keyboard = keyboard;
this.monitor = monitor;
this.mouse = mouse;
}

public Keyboard getKeyboard()
{
return keyboard;
}

public Monitor getMonitor()
{
return monitor;
}

public Mouse getMouse()
{
return mouse;
}
}

Keyboard

public class Keyboard implements CompItem
{
@Override
public String getName()
{
return this.getClass().getSimpleName();
}
}

Monitor

public class Monitor implements CompItem
{
@Override
public String getName()
{
return this.getClass().getSimpleName();
}
}

Mouse

public class Mouse implements CompItem
{
@Override
public String getName()
{
return this.getClass().getSimpleName();
}
}

Результат вывода:

Keyboard
Monitor
Mouse
Work!
  • ,

com.javarush.test.level15.lesson02.task05 работает, но не проходит тест

package com.javarush.test.level15.lesson02.task05;

import java.util.ArrayList;
import java.util.List;

/* ООП — исправь ошибки в наследовании
Исправь метод containsBones и всю связанную с ним логику так, чтобы:
1. Поведение программы осталось прежним, т.е. она должна выдавать то же самое, что и выдает сейчас
2. Метод containsBones должен возвращать тип Object и значение «Yes» вместо true, «No» вместо false
*/

public class Solution {
public static interface Alive {
Object containsBones();
}

static String str;

public static class BodyPart implements Alive {
protected String name;
protected Object isFoot = false;

public BodyPart(String name) {
this.name = name;
}

public Object containsBones() {
Object obj = «Yes»;
if (isFoot.equals(false)) {
obj = «Yes»;
} else if (isFoot.equals(true)) {
obj = «No»;
} return obj;
}

public String toString() {
if (containsBones().equals(«Yes»)) {
str = name + " содержит кости";
} else if (containsBones().equals(«No»)){
str = name + " не содержит кости";
} return str;
}
}

public static class Finger extends BodyPart {
public Finger(String name, Object isFoot) {
super(name);
this.isFoot = isFoot;
}

public Object containsBones() {
return super.containsBones();
}
}
public static void main(String[] args)
{
printlnFingers();
printlnBodyParts();
printlnAlives();
}
private static void printlnAlives() {
System.out.println(new BodyPart(«Рука»).containsBones());
}
private static void printlnFingers() {
Listfingers = new ArrayList(5);
fingers.add(new Finger(«Большой», true));
fingers.add(new Finger(«Указательный», true));
fingers.add(new Finger(«Средний», true));
fingers.add(new Finger(«Безымянный», false));
fingers.add(new Finger(«Мизинец», true));
System.out.println(fingers.toString());
}

protected static void printlnBodyParts() {
ListbodyParts = new ArrayList(5);
bodyParts.add(new BodyPart(«Рука»));
bodyParts.add(new BodyPart(«Нога»));
bodyParts.add(new BodyPart(«Голова»));
bodyParts.add(new BodyPart(«Тело»));
System.out.println(bodyParts.toString());
}
}

// Исходный код
//public class Solution {
// public static interface Alive {
// boolean containsBones();
// }
//
// public static class BodyPart implements Alive {
// private String name;
//
// public BodyPart(String name) {
// this.name = name;
// }
//
// public boolean containsBones() {
// return true;
// }
//
// public String toString() {
// return containsBones()? name + " содержит кости": name + " не содержит кости";
// }
// }
//
// public static class Finger extends BodyPart {
// private boolean isFoot;
// public Finger(String name, boolean isFoot) {
// super(name);
// this.isFoot = isFoot;
// }
//
// public boolean containsBones() {
// return super.containsBones() && !isFoot;
// }
// }
// public static void main(String[] args)
// {
// printlnFingers();
// printlnBodyParts();
// printlnAlives();
// }
//
// private static void printlnAlives() {
// System.out.println(new BodyPart(«Рука»).containsBones());
// }
//
// private static void printlnBodyParts() {
// ListbodyParts = new ArrayList(5);
// bodyParts.add(new BodyPart(«Рука»));
// bodyParts.add(new BodyPart(«Нога»));
// bodyParts.add(new BodyPart(«Голова»));
// bodyParts.add(new BodyPart(«Тело»));
// System.out.println(bodyParts.toString());
// }
//
// private static void printlnFingers() {
// Listfingers = new ArrayList(5);
// fingers.add(new Finger(«Большой», true));
// fingers.add(new Finger(«Указательный», true));
// fingers.add(new Finger(«Средний», true));
// fingers.add(new Finger(«Безымянный», false));
// fingers.add(new Finger(«Мизинец», true));
// System.out.println(fingers.toString());
// }
//}
  • ,

level13.lesson11.home07;

Подскажите, что не так?
package com.javarush.test.level13.lesson11.home07;

/* Интерфейс SimpleObject
1. Создай класс StringObject.
2. В классе StringObject реализуй интерфейс SimpleObject с параметром типа String.
3. Программа должна компилироваться.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
       SimpleObject<String> stringObject = new StringObject<String>();
    }

    interface SimpleObject<T>
    {
        SimpleObject<T> getInstance();
    }
    public static class StringObject<String>  implements SimpleObject
    {

        @Override
        public SimpleObject<String> getInstance()
        {
            return new StringObject<String>();  //To change body of implemented methods use File | Settings | File Templates.
        }


    }

}
  • ,

level07.lesson12.bonus03

Подскажите пожалуйста в чём ошибка?
Программа не проходит тестирование:

package com.javarush.test.level07.lesson12.bonus03;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/* Задача по алгоритмам
Задача: Написать программу, которая вводит с клавиатуры 20 чисел и выводит их в убывающем порядке.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] array = new int[20];
        for (int i = 0; i < 20; i++)
        {
            array[i] = Integer.parseInt(reader.readLine());
        }

        sort(array);

        for (int x : array)
        {
            System.out.println(x);
        }
    }

    public static void sort(int[] array)
    {
        int[] arrTMP = new int[array.length];

        for (int i = 0; i < array.length; )
        {
            arrTMP[i] = array[array.length - i - 1];
            i++;
        }

        for (int i = 0; i < array.length; )
        {
            array[i] = arrTMP[i];
            i++;
        }
    }
}
  • ,

level08.lesson11.home03

1. Создать словарь Map (<String, String>) и добавить туда 10 человек в виде «Фамилия»-«Имя».
2. Пусть среди этих 10 человек есть люди с одинаковыми именами и/или фамилиями.
3. Вывести содержимое Map на экран.

Пишу:

public static Map<String, String> createPeopleList()
{
Map<String, String> map = new HashMap<String, String>();
map.put(«Горбачев»,«Алексей»);
map.put(«Чудинов»,«Константин»);
map.put(«Санников»,«Евгений»);
map.put(«Рыбцов»,«Сергей»);
map.put(«Рогачев»,«Василий»);
map.put(«Рычковский»,«Денис»);
map.put(«Скосырских»,«Александра»);
map.put(«Пузина»,«Елизавета»);
map.put(«Ерепанов»,«Денис»);
map.put(«Табулды»,«Константин»);

return map;
}

Но программа тестирование не проходит. Уже даже всем одинаковые имена забивал — тот же результат. Опять где-то неправильный формат вывода?

Методы из шаблона задания не трогал.
  • ,

Оператор деления по модулю

Оператор деления по модулю — оператор mod, обозначается символом %.

Этот оператор возвращает остаток от деления первого операнда на второй.
Оператор mod "%" в Java работает не только с целыми (такие как: byte/int/short/long), но и с плавающей точкой (такие как: float/double) числами\типами.

Приведенная ниже программа иллюстрирует работу этого оператора.

package com.l2cccp.work;

public class Mod
{
	public static void main(String args[])
	{
		int i = 17; // Целые
		double d = 17.3; // С плавающей точкой
		
		System.out.println("i mod 10 = " + i % 10);
		System.out.println("d mod 10 = " + d % 10);
	}
}


Выполнив эту программу, вы получите следующий результат:

i mod 10 = 7
d mod 10 = 7.300000000000001


С работой данного оператора разобрались, но как же его использовать.
Как вариант для склонения слов в зависимости от количества.

Так как я работаю разработчиком эмулятора игры на java для меня очень важно чтобы многие слова в сообщениях склонялись.

К примеру:
1: Вы играете уже 1 день.
2: Вы играете уже 2 дня.
3: Вы играете уже 5 дней.

Напишем программу склонения:
package com.l2cccp.work;

public class Mod
{
	public static void main(String args[])
	{
		int[] day= new int[] { 1, 2, 5 };

		System.out.println("Вы играете уже " + day[0] + " " + declension(day[0]));
		System.out.println("Вы играете уже " + day[1] + " " + declension(day[1]));
		System.out.println("Вы играете уже " + day[2] + " " + declension(day[2]));
	}
        
	public static String declension(int count)
	{
		String one = "день";
		String two = "дня";
		String five = "дней";

		if(count > 100)
			count %= 100;

		if(count > 20)
			count %= 10;
                
		switch(count)
		{
			case 1:
				return one;
			case 2:
			case 3:
			case 4:
				return two;
			default:
				return five;
		}
	}
}

Выполнив эту программу, вы получите следующий результат:

Вы играете уже 1 день
Вы играете уже 2 дня
Вы играете уже 5 дней


Все работает так как нам нужно, но что если нам потребуется получить несколько склонении в одном результате?

К примеру:
1: Вы играете уже 1 день и 1 час.
2: Вы играете уже 2 дня и 4 часа.
3: Вы играете уже 5 дней 9 часов.

Не писать же нам дополнительный метод склонения для каждого слова, которое нам понадобится.

Напишем программу склонения по типу:
package com.l2cccp.work;

public class Mod
{
	public static void main(String args[])
	{
		int[] day = new int[] { 1, 2, 5 };
		int[] hour = new int[] { 1, 4, 9 };
		
		System.out.println("Вы играете уже " + day[0] + " " + declension(day[0], "Days") + " и " + hour[0] + " " + declension(hour[0], "Hour"));
		System.out.println("Вы играете уже " + day[1] + " " + declension(day[1], "Days") + " и " + hour[1] + " " + declension(hour[1], "Hour"));
		System.out.println("Вы играете уже " + day[2] + " " + declension(day[2], "Days") + " и " + hour[2] + " " + declension(hour[2], "Hour"));
	}

	public static String declension(int count, String type)
	{
		String one = "";
		String two = "";
		String five = "";

		if(type.equals("Days"))
		{
			one = "день";
			two = "дня";
			five = "дней";
		}
		else if(type.equals("Hour"))
		{
			one = "час";
			two = "часа";
			five = "часов";
		}

		if(count > 100)
			count %= 100;

		if(count > 20)
			count %= 10;

		switch(count)
		{
			case 1:
				return one;
			case 2:
			case 3:
			case 4:
				return two;
			default:
				return five;
		}
	}
}

Выполнив эту программу, вы получите следующий результат:
Вы играете уже 1 день и 1 час
Вы играете уже 2 дня и 4 часа
Вы играете уже 5 дней и 9 часов


Так как наш метод описан как паблик «public» то вызвать его можно легко из любого пакета:
Mod.declension(count, type);

Собственно вот и все, надеюсь кому то это будет полезно.

Удачи в освоении Java языка.

level04.lesson16.home03

Подскажите как складывать положительные и отрицательные значения в JAVA.
Смотрел статью на сайте Интуит, но что то так ничего и не понял.
При складывании отрицательное значение -1 засчитывается почему то как 10.
И вообще правильна ли логика программы?
или имелось ввиду нечто другое?

package com.javarush.test.level04.lesson16.home03;

/* Посчитать сумму чисел
Вводить с клавиатуры числа и считать их сумму. Если пользователь ввел -1, вывести на экран сумму и завершить программу. -1 должно учитываться в сумме.
*/

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(reader.readLine());
int b = Integer.parseInt(reader.readLine());
int c = Integer.parseInt(reader.readLine());

if (a == -1){
System.out.println(«a=-1»+(a+b+c));
}
else if (b == -1){
System.out.println(«b=-1»+(a+b+c));
}
else if (c == -1){
System.out.println(«c=-1»+(a+b+c));
}
}
}
  • ,

Странное поведение Intellij IDEA

Частенько появляется такая раздражающая ситуация: написал код, запускаешь Run для проверки — а среда пытается открыть совершенно другую задачу, которая может даже и не быть открытой на вкладке. В итоге до тех пор, пока не удалишь эту открывающуюся задачу из пакета — нужную тебе задачу не запустить.
Кто-нибудь сталкивался с таким? Как это исправить?