Смотритель: hubert
  • ,

Оформление кода

Одну из задач (которая была решена и принята сервером) я реализовал в виде кода (забил * и X-ми чтобы не спойлерить).

/* xxx
1. Считывать строки(параметры) с консоли, пока пользователь не введет пустую строку(Enter).
2. Каждый параметр соответствует имени ***.
Для каждого параметра:
3. Создать объект *** класса ***, который равен *** из getX(String параметр).
4. Вывести на экран toString().
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        //Add your code here
        List<String> al= new ArrayList<>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while(!"".equals(str = reader.readLine())) al.add(str);
        for (int i = 0; i <al.size(); i++) System.out.println(XFactory.getX(al.get(i)).toString());
    }
...

Зашедший в гости полузнакомый раскритиковал, что так не пишут (это тебе не C и т.п.).
Не подскажете в чем я не прав (есть какие нормы и общепринятые стандарты)?
Или использование в одной строчке нескольких конструкций (оно вообще, без промежуточных присваиваний временным переменным, может привести в каких-либо ситуациях к каким-либо возможным последствиям?) — дурной тон?
Основные переменные (al, reader, str) объявлены до их использования (pascal-стиль), так как мне удобнее, всегда знаешь где можешь найти описание переменной с возможным комментарием.
Вспомогательные переменные объявлены в нужной зоне видимости (как переменная цикла i).
Idea не ругается, правда предлагает 2 опции:
Split into declaration and assigment (таки разделить объявление и присваивание) и заключить некоторые участки в блок try.

Как бы Вы правильнее написали код?

Что не так?
Для такой задачи не стоит комментировать каждую строчку.

Thinking in Java, глава 8. Вопрос по приведённому в книге коду.

//: polymorphism/ReferenceCounting.java
//  Уничтожение совместно используемых встроенных объектов
import static net.mindview.util.Print.*;
 
class Shared {
  private int refcount = 0;
  private static long counter = 0;
  private final long id = counter++;
  public Shared() {
    print("Creating " + this);
  }
  public void addRef() { refcount++; }
  protected void dispose() {
    if(--refcount == 0)
      print("Disposing " + this);
  }
  public String toString() { return "Shared " + id; }
}
 
class Composing {
  private Shared shared;
  private static long counter = 0;
  private final long id = counter++;
  public Composing(Shared shared) {
    print("Creating " + this);
    this.shared = shared;
    this.shared.addRef();
  }
  protected void dispose() {
    print("disposing " + this);
    shared.dispose();
  }
  public String toString() { return "Composing " + id; }
}
 
public class ReferenceCounting {
  public static void main(String[] args) {
    Shared shared = new Shared();
    Composing[] composing = { new Composing(shared),
      new Composing(shared), new Composing(shared),
      new Composing(shared), new Composing(shared) };
    for(Composing c : composing)
      c.dispose();
  }
}


Программа работает верно, на экран выводится:
Creating Shared 0
Creating Composing 0
Creating Composing 1
Creating Composing 2
Creating Composing 3
Creating Composing 4
disposing Composing 0
disposing Composing 1
disposing Composing 2
disposing Composing 3
disposing Composing 4
Disposing Shared 0


Вопрос по методу dispose() класса Shared. Метод выполнится только при refcount == 1, но я нигде не вижу декрементации данной переменной, вот и возник вопрос: благодаря чему выводится последняя строка?

JSOUP + multipart/form-data response

Добрый день,
В общем необходимо отправить на сайт данные в виде ответа в форме multipart/form-data.

Перехватить запрос генерируемый браузером труда не составляет, но выполнить такой же с помощью JSOUP вызывает сложности.

В качестве примера можно взять простейшую форму, которая сгенирирует нужный запрос.
<form action=«localhost:8000» method=«post» enctype=«multipart/form-data»
<input type=«text» name=«text» value=«text default»
<input type=«file» name=«file1»
<input type=«file» name=«file2»
Submit</button
</form

Запрос:
->Request Headers
Provisional headers are shown
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryjtkXVNw9YVG1H2P9
Origin:null
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
X-DevTools-Emulate-Network-Conditions-Client-Id:8DCCE949-56FA-4AB0-81B7-DA2BC7960E5C

->Request Payload
------WebKitFormBoundaryjtkXVNw9YVG1H2P9
Content-Disposition: form-data; name=«text»

text default
------WebKitFormBoundaryjtkXVNw9YVG1H2P9
Content-Disposition: form-data; name=«file1»; filename=""
Content-Type: application/octet-stream

------WebKitFormBoundaryjtkXVNw9YVG1H2P9
Content-Disposition: form-data; name=«file2»; filename=""
Content-Type: application/octet-stream

------WebKitFormBoundaryjtkXVNw9YVG1H2P9--

Я пытался различными способами сгенирировать аналогичный запрос различными вариантами, и остановился на таком, но пока «танцы с бубнами» не дают результатов.

Map<String, String> responseMap= new HashMap<String, String>();
    String key1 = "------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
         "Content-Disposition: form-data; name=\"text\"\r\n\r\n";
    String value1 = "text default";
    headersMap.put(key1, value1);

    String key2 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
        "Content-Disposition: form-data; name=\"doc_sma_ref_file\"; filename=\"\"" +
        "\r\nContent-Type: application/octet-stream\r\n\r\n";
    String value2 = "";
    headersMap.put(key2, value2);

    String key3 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK\r\n" +
        "Content-Disposition: form-data; name=\"doc_val_ref_file\"; filename=\"\"" +
        "\r\nContent-Type: application/octet-stream\r\n\r\n";
    String value3 = "";
    headersMap.put(key3, value3);
    
    String key4 = "\r\n------WebKitFormBoundary9A3GpeDAwfa0TBDK--";
    String value4 = "";
    headersMap.put(key4, value4);

    Connection.Response resBGT = Jsoup.connect(URL)
        .header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary9A3GpeDAwfa0TBDK")
        .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36")
        .followRedirects(true)
        .data(responseMap)
        .cookies(cookies)
        .ignoreHttpErrors(true)
        .timeout(15000)
        .method(Connection.Method.POST)
        .execute();


Возможно у кого-то есть опыт в данном вопросе. Если вас не затруднит направьте на путь истинный.
Также возможно, есть способ перехватить запрос сгенирированный JSOUP, что впринципе также позволило бы продвинутся дальше.

Спасибо
  • ,

Google API для вычисления расстояния между 2 городами.

Приветствую. Нужно сделать простую программу с использованием Google API для вычисления расстояния между 2 городами.
Никогда с этой темой не сталкивался, может быть кто знаком — посоветуйте какие нибудь источники, где что почитать, посмотреть…
Буду рад любой помощи.

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

Проблема вот в чем: я дошел до 27 уровня и проект сейчас на ноуте. Но мне взбредило в голову решать задачи еще и на другом компе в более удобном месте, я всё установил, но вот решенные задачи пройденых 27 уровней с сервера не пришли. Есть ли возможность загрузить их?
  • ,

Запуск maven проекта в IDEA

Ребята, помогите с таким вопросом, может кто сталкивался.
Пытаюсь запустить веб проект в IDEA — любой из этапов сборки мавена, выдает ошибку «Error: Could not find or load main class =». При этом проект рабочий и через консоль запускается. Т.е в консоли я пишу mvn clean install, у меня формируется war файл и через tomcat я могу его запустить. Я уже столько гуглила и ничего не нашла. Может, нужны какие-то настройки в IDEA? Первый раз вообще с этим сталкиваюсь.

UberJar - нужен мануал

Доброго времени суток, уважаемые! Может кто подкинуть толковый мануал по созданию UberJar'а? У меня в зависимостях только MS SQL библиотека.
Цель — получить из всего приложения один *.jar файл, который уже запускать из командной строки в винде. Желательно с параметрами.
  • ,

Ваши предположения о команде JavaRush - какие они?

Привет всем джаварашовцам!

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

Мне просто интересно :)

Например, как вы думаете, сколько человек в команде Джавараша?
Какие обязанности — кто чем занимается?
Где работают все эти люди: дома, в офисе, в парке на лавочке?