• ,

Достойный и красивый код

Раздел с примерами как не следует писать программный код есть, так может следует иметь тему на форуме и с диаметрально противоположными примерами? Догадываюсь, что понятия «достойно и красиво» весьма субъективны, ну так дружелюбно и без насмешек ведь вполне можно обходиться с коллегами по изучению java-премудростей, не так ли, друзья?!
Идея родилась вчера, когда в комментариях к заданиям в новой версии javarush обнаружил для себя два познавательных и изящных кода (жаль, что авторам в тех разделах нельзя было «плюсануть» — создатели javarush эту возможность не предоставили). А если взять примеры из изобразительного искусства, музыки, литературы, то обучение строится на достойных примерах для подражания. Не встречалось что-то обучение мастерству на примерах китча, безвкусицы, пошлости. Даже в строгой шахматной аннотации используется восклицательный знак, когда следует неочевидный и весьма эффектный ход… В общем, я за подборку достойных и красивых примеров для подражания и в java-программировании.

P.S.
Созвучная некоторым изложенным мыслям статья: «Что такое красивый код, и как его писать?»
  • ,

level06.lesson11.bonus02

Приветствую, коллеги. Компилируется без ошибок, работает, тест не проходит, никак не могу найти проблему.
Спасибо всем за внимание.

package com.javarush.test.level06.lesson11.bonus02;

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

/* Нужно добавить в программу новую функциональность
Задача: У каждой кошки есть имя и кошка-мама. Создать класс, который бы описывал данную ситуацию. Создать два объекта: кошку-дочь и кошку-маму. Вывести их на экран.
Новая задача: У каждой кошки есть имя, кошка-папа и кошка-мама. Изменить класс Cat так, чтобы он мог описать данную ситуацию.
Создать 6 объектов: дедушку(папин папа), бабушку(мамина мама), папу, маму, сына, дочь.
Вывести их всех на экран в порядке: дедушка, бабушка, папа, мама, сын, дочь.

Пример ввода:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка

Пример вывода:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей
*/

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String gfatherName = reader.readLine();
        Cat catGFather = new Cat(gfatherName);

        String gmotherName = reader.readLine();
        Cat catGMother = new Cat(gmotherName);

        String fatherName = reader.readLine();
        Cat catFather = new Cat(fatherName,null, catGFather);

        String motherName = reader.readLine();
        Cat catMother = new Cat(motherName, catGMother, null);

        String sonName = reader.readLine();
        Cat catSon = new Cat(sonName, catMother, catFather);

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catMother, catFather);

        System.out.println(catGFather);
        System.out.println(catGMother);
        System.out.println(catFather);
        System.out.println(catMother);
        System.out.println(catSon);
        System.out.println(catDaughter);
    }

    public static class Cat
    {
        private String name;
        private Cat mother;
        private Cat father;

        Cat(String name)
        {
            this.name = name;

        }

        Cat(String name, Cat mother, Cat father)
        {
            this.name = name;
            this.mother = mother;
            this.father = father;
        }


        @Override
        public String toString()
        {
            if ((mother == null)&&(father == null))
                return "Cat name is " + name + ", no mother"+", no father";
            else if (mother == null)
                return "Cat name is " + name + ", no mother"+", father is " + father.name;
            else if (father ==null)
                return "Cat name is " + name + ", mother is " + mother.name+", no father";
            else
                return "Cat name is " + name + ", mother is " + mother.name+", father is " + father.name;



        }
    }

}

level05.lesson12.home05;

/* Вводить с клавиатуры числа и считать их сумму
Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution
{
public static void main(String[] args) throws Exception
{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int summ = 0;
for (; true; )
{
String text = bf.readLine();
if (text.equals(«сумма»))

System.out.println(summ);
else
{
int num = Integer.parseInt(text);
summ = summ + num;
}

}
}
}


в ИДЕА вроде проходит все мои проверки, но проверку сервера пройти не могу. Подскажите что упустил? Может break; куда то засунуть надо?

level15.lesson12.home09

Вроде работает, но не принимает. Взгляните на код, о, Великие Гуру.
import java.io.*;
import java.util.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        //add your code here
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String input = reader.readLine();
        char[] charArray = input.toCharArray();
        List<String> parametersList = new ArrayList<>();
        int parametersListIndex = 0;
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == '?' || charArray[i] == '&') { 
                parametersList.add("");
                while (true) { 
                    i++;
                    if (charArray[i] == '&' || charArray[i] == '=') {
                        parametersListIndex++;
                        break;
                    }
                    else {
                        parametersList.set(parametersListIndex, parametersList.get(parametersListIndex) + charArray[i]);
                    }
                }
                if (charArray[i] == '&')
                    i--;
            }
        }
        for (String s : parametersList) {
            System.out.print(s + " ");
        }
        for (String s : parametersList) {
            System.out.println();
            if (s.equals("obj")) {
                try {
                    alert(Double.parseDouble(objAlert(input)));
                }
                catch (Exception e) {
                    alert(objAlert(input));
                }
            }
        }
    }

    public static String objAlert(String input) {
        int objIndex = input.indexOf("obj=");
        String value = "";
        for (int i = objIndex + 4; i < input.length(); i++) {
            if (input.charAt(i) == '&')
                break;
            else {
                value += input.charAt(i);
            }
        }
        return value;
    }

    public static void alert(double value) {
        System.out.println("double " + value);
    }

    public static void alert(String value) {
        System.out.println("String " + value);
    }
}
  • ,

HabraHabr и HTML

Всем доброго времени суток. Хотелось бы посоветоваться по поводу статей на хабре. В ссылках литературы часто появляется ссылки на хабру, да и вообще толково там пишут люди, но вот в чем проблема, и не у меня одного, насколько я читал комментарии. Не знаю как назвать, но наверное это не обработанный HTML-код, например
Адекватного решения проблемы не нашел, кроме как запиливать данный код в .txt, потом переименовывать в .html и открывать через хром, не нашел. Думал может есть какое-то расширение в хроме, которое бы делало это автоматически, но увы. Так что прощу помощи у вас, форумчане :)
  • ,

Полезные цитаты из книг по программированию.

Во время отладки иногда очень увлекательно отслеживать
надоедливую ошибку четыре часа, но, если в течение како#
го#то времени (скажем, 15 минут) вы не добиваетесь про#
гресса, обычно лучше отложить поиск ошибки. Позвольте
своему подсознанию немного поработать над проблемой.
Попробуйте подумать об альтернативном подходе, который вообще устранил бы
проблему. Перепишите проблемный фрагмент кода с нуля. Вернитесь к нему со
свежей головой. В борьбе с компьютерными проблемами нет ничего благород#
ного. Лучше их избегать.
// Стив Макконел, «Совершенный код».
  • ,

Проблема с Intellij Idea

После обновления Intellij Idea v.14 Community Edition программа не компилируется, если в коде используются символы типа Char русского алфавита. Выдает ошибку Error:(22, 38) java: unclosed character literal

level04.lesson16.home03

Программа вродькак работает, но не засчитывается :( Друзья, подскажите, если где ошибка

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

/* Посчитать сумму чисел
Вводить с клавиатуры числа и считать их сумму. Если пользователь ввел -1, вывести на экран сумму и завершить программу.  -1 должно учитываться в сумме.
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Solution
{


    public static void main(String[] args)   throws Exception
    {
       Scanner in = new Scanner(System.in);

        while (true)
        {
            int a = in.nextInt();
            int b = in.nextInt();
            int sum = a + b;
            if (a == -1 || b == -1)
            {
             System.out.println(sum);
             return;
            }

        }
    }
}

test.level07.lesson06.task03

Подскажите где ошибка. Всё выдает а тест не проходит?
.
package com.javarush.test.level07.lesson06.task03;

/* 5 строчек в обратном порядке
1. Создай список строк.
2. Считай с клавиатуры 5 строк и добавь в него.
3. Расположи их в обратном порядке.
4. Используя цикл выведи содержимое на экран, каждое значение с новой строки.
*/
import java.util.*;
import java.io.*;
public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<String> list = new ArrayList<String>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < 5; i++)
        {
            list.add(br.readLine());

        }
        ArrayList<String> copylist = new ArrayList<String>();
        for ( int j = list.size() - 1; j >= 0; j--)
        {
            copylist.add(list.get(j));

            list.remove(j);
        }
        for (int i = 0; i < copylist.size(); i++)
        {
            list.add(copylist.get(i));

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

        //Напишите тут ваш код

    }
}

level13.lesson04.task03


import java.awt.*;

/* Интерфейс Animal
1. Унаследовать Fox от интерфейса Animal.
2. Поменяй код так, чтобы в классе Fox был только один метод - getName.
3. Методы удалять нельзя!
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
    }

    public interface Animal
    {
        Color getColor();
    }

    static abstract class Dog implements Animal {
        public Color getColor()
        {
            return null;
        }
    }

    public static class Fox extends Dog implements Animal
    {
        public String getName()
        {
            return "Fox";
        }
    }
}

Правильно ли я понял задание? Вроде один метод в теле. Вообще, конечно существует 2 метода, первый реализован в классе Dog и наследуется.
  • ,

Как написать код правильнее и изящнее?

Часто решив задачу остается ощущение что написанный код хоть и рабочий, но выглядит очень уж коряво.

И тогда возникает вопрос:
Как написать код правильнее и изящнее?

// 
        // Вывести слова списка list на экран в обратном порядке.

        for (int i = list.size()-1; i >-1; i--)
        {
            System.out.println (list.get(i));
        }


Как было бы лучше написать код вывода слов списка в вышеприведенном примере кода?