• ,

level05.lesson05.task02 Помогите пожалуйста

Реализовать метод fight
Реализовать метод boolean fight(Cat anotherCat):
реализовать механизм драки котов в зависимости от их веса, возраста и силы.
Зависимость придумать самому. Метод должен определять, выиграли ли мы (this) бой или нет,
т.е. возвращать true, если выиграли и false — если нет.
Должно выполняться условие:
если cat1.fight(cat2) = true, то cat2.fight(cat1) = false

У меня несколько вопросов (заранее спасибо добрые люди :) :

1) программа сработала нормально вивела «true», но проверку не прошла.
2) параметр (Cat anotherCat) ето такое правило написание параметра для взаимодействия обєктов?
3) почему когда пишем нужно писать ссилку на параметри обєкта Cat с помощью this.*
Код ниже
public class Cat
{
public String name;
public int age;
public int weight;
public int strength;
public static void main (String[] args) {
Cat cat1 = new Cat(10, 20, 30);
Cat cat2 = new Cat(5, 10, 15);
System.out.print (cat1.fight(cat2));
}

public Cat(int a, int w, int s)
{
this.age = a;
this.weight = w;
this.strength = s;
}

public boolean fight (Cat anotherCat)
{
//Напишите тут ваш код
int skillCat1 = this.age+this.weight+this.strength;
int skillCat2 = anotherCat.age+anotherCat.weight+anotherCat.strength;
if (skillCat1 > skillCat2) {
return true;
}
else {
return false;
}
}
}
  • ,

level15.lesson12.home01

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


/* Разные методы для разных типов
1. Считать с консоли данные, пока не введено слово "exit".
2. Для каждого значения вызвать метод print. Если значение:
2.1. содержит точку '.', то вызвать метод print для Double;
2.2. больше нуля, но меньше 128, то вызвать метод print для short;
2.3. больше либо равно 128, то вызвать метод print для Integer;
2.4. иначе, вызвать метод print для String.
*/

public class Solution {
    public static void main(String[] args) throws IOException {
        //напиште тут ваш код
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String a=null;
        try
        {
            while (true)
            {
                a = reader.readLine();
                if (a.equals("exit"))
                {
                    break;
                }
                else if (a.contains("."))
                {

                    print(Double.parseDouble(a));
                }
                else if (Integer.parseInt(a) >= 128)
                {
                    print(Integer.parseInt(a));
                }
                else if ((Integer.parseInt(a) > 0) && (Integer.parseInt(a) < 128))
                {
                    print(Short.parseShort(a));
                }
                else
                {
                    print(a);
                }
            }
        }
        catch (NumberFormatException e)
        {
        print(a);
        }
    }

    public static void print(Double value) {
        System.out.println("Это тип Double, значение " + value);
    }

    public static void print(String value) {
        System.out.println("Это тип String, значение " + value);
    }

    public static void print(short value) {
        System.out.println("Это тип short, значение " + value);
    }

    public static void print(Integer value) {
        System.out.println("Это тип Integer, значение " + value);
    }
}

Уже кучу всего перепробовал, ни в какую не принимает сервер.
Вывод работает правильно.
  • ,

level13.lesson11.bonus01

package com.javarush.test.level13.lesson11.bonus01;

/* Сортировка четных чисел из файла
1. Ввести имя файла с консоли.
2. Прочитать из него набор чисел.
3. Вывести на консоль только четные, отсортированные по возрастанию.
Пример ввода:
5
8
11
3
2
10
Пример вывода:
2
8
10
*/

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;


public class Solution
{
    public static void main(String[] args) throws IOException
    {
        // напишите тут ваш код
        //BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        File f = new File("C:\\\\Users\\\\lol\\\\Desktop\\\\112.txt");
        InputStream inStream = new FileInputStream(f);
        ArrayList<Integer> list = new ArrayList<Integer>();

        while (inStream.read()>0)
        {

            char ch = (char) inStream.read();

            if (Character.isDigit(ch))
            {
                int aa = Integer.parseInt(Character.toString(ch));
                list.add(aa);
            }


        }

        Collections.sort(list);
        for (Integer b : list)
        {
           // if(b%2==0)
                System.out.println(b);
        }
    }
}


Если числа идут в одной строке через пробел, то код отрабатывает нормально.
Но, если задать числа в файле как в условии, то в лист попадают только 1
1
3
5
и какой-то мусор (он отсекается на проверке).
  • ,

Помогите разобраться level13.lesson11.bonus03;

Есть класс:
public final class BodyPart
{
    final static BodyPart LEG = new BodyPart("нога");
    final static BodyPart HEAD = new BodyPart("голова");
    final static BodyPart ARM = new BodyPart("рука");
    final static BodyPart STOMACH = new BodyPart("грудь");

    private String bodyPart;

    private BodyPart(String bodyPart)
    {
        this.bodyPart = bodyPart;
    }

    @Override
    public String toString()
    {
        return this.bodyPart;
    }
}

Почему мы создаём объекты прямо в классе? И зачем везде нужен методо toString() если мы его не вызываем( но он сам запускается каким то магическим методом).
так же есть еще 1 класс:
public abstract class AbstractRobot implements Attackable,Defensable
{
    private static int hitCount;
    public BodyPart attack()
    {
        BodyPart attackedBodyPart = null;
        hitCount = hitCount + 1;

        if (hitCount == 1)
        {
            attackedBodyPart =  BodyPart.ARM;
        } else if (hitCount == 2)
        {
            attackedBodyPart =  BodyPart.HEAD;
        } else if (hitCount == 3)
        {

            attackedBodyPart =  BodyPart.LEG;
        }
        else if(hitCount == 4){
            hitCount = 0;
            attackedBodyPart =  BodyPart.STOMACH;
        }
        return attackedBodyPart;

В чём смысл статической переменной hitCount если она всегда будет одинаковая и как мы прибавляем 1 в самом начале метода attack() если эта переменная(hitCount) не инициализированая?
  • ,

level30.lesson06.home01


package com.javarush.test.level30.lesson06.home01;
import java.util.concurrent.ForkJoinPool;

/* Fork/Join
1. Создайте класс BinaryRepresentationTask. Для этого на красном имени класса нажмите Alt+Enter -> Create Class ...
(класс должен наследоваться от RecursiveTask)
2. Реализуйте логику метода compute, должна переводить число в двоичное представление.
3. Используйте методы fork и join.
4. Пример функциональной реализации - метод binaryRepresentationMethod.
*/
public class Solution {
    private String binatyRepresentationMethod(int x) {
        int a = x % 2;
        int b = x / 2;
        String result = String.valueOf(a);
        if (b > 0) {
            return binatyRepresentationMethod(b) + result;
        }
        return result;
    }


    public static void main(String[] args) {
        Solution solution = new Solution();
        String result1 = solution.binatyRepresentationMethod(6);
        System.out.println(result1);

        System.out.println();
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        String result2 = forkJoinPool.invoke(new BinaryRepresentationTask(6));
        System.out.println(result2);
    }

}


Класс с основным методом

package com.javarush.test.level30.lesson06.home01;

import java.util.concurrent.RecursiveTask;


public class BinaryRepresentationTask extends RecursiveTask<String>
{
    private int i;

    public BinaryRepresentationTask(int i)
    {
        this.i = i;
    }

    @Override
    protected String compute()
    {
      // ...
    }
}


Варианты метода compute и комментарии

1.
protected String compute()
    {
        int a = i % 2;
        int b = i / 2;
        String result = String.valueOf(a);
        BinaryRepresentationTask task = new BinaryRepresentationTask(a);
        task.fork();
        if (b > 0)
        {
            return new BinaryRepresentationTask(b).compute() + task.join();
        }
        return result;
    }

Вывод правильный, на сервере не принимает с ошибкой «Программа работала слишком долго и была закрыта».

2.
protected String compute()
    {
        int a = i % 2;
        int b = i / 2;
        BinaryRepresentationTask task1 = new BinaryRepresentationTask(b);
        task1.fork();
        String result = String.valueOf(a);
        BinaryRepresentationTask task2 = new BinaryRepresentationTask(a);
        task2.fork();
        if (b > 0)
        {
            return task1.join() + task2.join();
        }
        return result;
    }

Тоже самое. Вывод правильный, на сервере не принимает с ошибкой «Программа работала слишком долго и была закрыта».

3. Ознакомившись более детально с дополнительным материалом, до меня дошло что, скорее всего, операции надо передавтаь как аргументы:
protected String compute()
    {
        BinaryRepresentationTask task1 = new BinaryRepresentationTask(i / 2);
        task1.fork();
        BinaryRepresentationTask task2 = new BinaryRepresentationTask(i % 2);
        task2.fork();
        String result = String.valueOf(task2.join());
        int b = Integer.parseInt(task1.join());
        if (b > 0)
        {
            return result+=b;
        }
        return result;
    }

Первые 4 строки всех остальных вариантов похожи на пункт 3. Ошибка везде StackOverflowError. Думаю, что решил бы этот пункт, если бы додумался как запустить дебаг для метода compute. Буду рад любой помощи.
Дополнительные материалы
  • ,

Помогите с задачей

есть задание:
Необходимо реализовать программу, которая, получив на вход изображение из исходного набора, присвоит верный номер класса (0 или 1) путем анализа графических данных.

Входные данные — изображение в формате PNG или JPEG.
Выходные данные — номер класса (1 или 0).

Программа должна запускаться под управлением одной из операционных систем из списка — Windows (7, 8), Linux — Ubuntu 14.04 и выше.

1. я не понимаю как передать файл в программу, т.е. с адресом «C:\\1.png» он видит, а «C:\\1» нет, а формат как раз надо определить.
2. как собственно определить формат? вроде слышал что первые 8 байтов являются заголовком и у всех png одинаковые, но не пойму как это реализовать.

Буду очень благодарен за помощь!

package com.javarush.test.level15.lesson12.home07

Помогите, пожалуйста. При попытке сдачи пишет «Неизвестная ошибка при работе с сервером».
Доп. файл лежит на рабочем столе. В Idea все работает.


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/* Файл в статическом блоке
1. Инициализируй константу Constants.FILE_NAME полным путем к файлу с данными, который содержит несколько строк.
2. В статическом блоке считай из файла с именем Constants.FILE_NAME все строки и добавь их по-отдельности в List lines.
3. Закрой поток ввода методом close().
*/

public class Solution {
    public static List<String> lines = new ArrayList<String>();

    static {
        String line;

        try {
            BufferedReader reader = new BufferedReader(new FileReader(Constants.FILE_NAME));

            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
            reader.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println(lines);
    }
}
  • ,

Где взять проект?

Конечно, сейчас я — один из самых глупых учеников Java.Rush, как минимум, потому что пришла сюда прямиком из… журналистики. Если бы мне еще 4 месяца назад кто-то сказал, что я буду учиться кодить, я бы просто умерла со смеху: где я и где java. Но я барышня в высшей степени упрямая, мне интересно. Но меня очень волнует вопрос: везде пишут, что нужно хотя бы на бесплатной основе поучаствовать в каком-то проекте, когда дойдёшь хотя бы до 15-18 уровня. А где его взять, этот самый проект? Не за деньги, конечно, а для опыта.
  • ,

test.level22.lesson18.big01 UnsupportedOperationException TRANSLUCENT

Добрый день! Задачу решил, но столкнулся с такой проблемой на Linux. Без компиза не работает отлавливаетель событий клавиатуры. А все потому, что не может создать прозрачное окно. Прозрачность не поддреживается.
Exception in thread "Thread-0" java.lang.UnsupportedOperationException: TRANSLUCENT translucency is not supported.
	at java.awt.Window.setOpacity(Window.java:3598)
	at java.awt.Frame.setOpacity(Frame.java:962)
	at com.javarush.test.level22.lesson18.big01.KeyboardObserver.run(KeyboardObserver.java:30)

Подскажите, как можно решить эту проблему?
  • ,

level09.lesson11.home03

Программа компилируется, работает правильно, но не проходит проверку на сервере. что не так?

package com.javarush.test.level09.lesson11.home03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

/* Метод в try..catch
Вводить с клавиатуры числа. Код по чтению чисел с клавиатуры вынести в отдельный метод readData.
Обернуть все тело (весь код внутри readData, кроме объявления списка, где будут храниться числа) этого метода в try..catch.
Если пользователь ввёл какой-то текст, вместо ввода числа, то метод должен перехватить исключение и вывести на экран все введенные числа в качестве результата.
Числа выводить с новой строки сохраняя порядок ввода
*/

public class Solution
{
    public static void main(String[] args) throws IOException{
        readData();
    }

    public static void readData() throws IOException{
        //add your code here
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        try
        {
            while (true){
            BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
            numbers.add(Integer.parseInt(rdr.readLine()));
            }
        }
        catch (NumberFormatException e)
        {
                for(int i : numbers)
                {
                    System.out.println(i);
                }
        }
    }
}
  • ,

package com.javarush.test.level07.lesson06.task01;

Прошу мне помочь в решении задач уровня 7, урока 6.
При решении каждой из задач этой серии возникает следующая ошибка:

src/com/javarush/test/level07/lesson06/task01/Solution.java:16: error: cannot find symbol
        ArrayList<String> list = new ArrayList<String>();
        ^
  symbol:   class ArrayList
  location: class Solution
src/com/javarush/test/level07/lesson06/task01/Solution.java:16: error: cannot find symbol
        ArrayList<String> list = new ArrayList<String>();


Все задачи прекрасно решаются и компилируются без ошибок в Intellej IDEA.
Вот пример рабочей программы которая в форме сайта выдает ошибку описанную выше:

package com.javarush.test.level07.lesson06.task01;

/* 5 различных строчек в списке
1. Создай список строк.
2. Добавь в него 5 различных строчек.
3. Выведи его размер на экран.
4. Используя цикл выведи его содержимое на экран, каждое значение с новой строки.
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        //  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        ArrayList<String> list = new ArrayList<String>();

       // for (int i = 0; i < 5; i++)
        //{
          //  String s = "sadfasf";
          //  list.add(s);
       // }
       
        list.add("test1");
        list.add("test2");
        list.add("test3");
        list.add("test4");
        list.add("test5");
        
        int size = list.size();
        System.out.println(size);

        for (int i = 0; i < 5; i++)
        {
            System.out.println(list.get(i));
        }
    }
}


Прошу помочь мне в решении этой проблемы.

level07.lesson06.task01

При тестировании IDEA зависает и спустя время выскакивает ошибка



В IDEA программа компилируется и выполняется.

/* 5 различных строчек в списке
1. Создай список строк.
2. Добавь в него 5 различных строчек.
3. Выведи его размер на экран.
4. Используя цикл выведи его содержимое на экран, каждое значение с новой строки.
*/

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < 5; i++) {
            list.add(rd.readLine());
        }

        System.out.println(list.size());

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

    }
}