Много вопросов у новичка (Java)

262
03 июля 2017, 17:07

Здравствуйте. Начал изучать Java. Вот собственно код одной из первых написанных программ (описание программы и вопросы даны после кода):

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ReadAndParse {
    public static void main(String[] args) throws Exception {
        double a, b, c;
        double D;
        double x1, x2;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("A=");
        String s1 = br.readLine();
        System.out.print("B=");
        String s2 = br.readLine();
        System.out.print("C=");
        String s3 = br.readLine();
        a = Double.parseDouble(s1);
        b = Double.parseDouble(s2);
        c = Double.parseDouble(s3);
        D = b * b - 4 * a * c;
        x1 = (-b - Math.sqrt(D)) / (2 * a);
        x2 = (-b + Math.sqrt(D)) / (2 * a);
        System.out.println("x1=" + Double.toString(x1));
        System.out.println("x1=" + x2);
    }
}

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

  1. void значит "пустота", "пустой" это значит что функция, в данном случае main не возвращает значение после конца выполнения" - прочитал я в интернете, но не очень понял, что к чему, хотел бы увидеть пример/сравнение с функцией, которая возвращает значение.

  2. Не до конца разобрался со строчкой вызова BufferedReader, для чего пишется "new" и для чего нужен текст в скобках (new InputStreamReader(System.in));

  3. Почему(и для чего, ведь число уже отпарсено в коде раннее) в первом случае мы пишем Double.toString(x1), а во втором - нет?

    System.out.println("x1=" + Double.toString(x1));   
    System.out.println("x2=" + x2);
    
  4. Сложно ли найти работу Java-программисту? Какие затраты по времени, примерно, могут ожидать, чтобы найти первую, пусть и не крутую, но работу. (Если учитывать, что высшего образования нет, я вот только-только закончил школу, и даже не знаю, поступлю ли в ВУЗ).

  5. Какую литературу посоветуете по Java?

Answer 1

1) Функция может возвращать любой тип данных, существующий в Java, или объект класса, созданного вами:

public static String myMethod() { 
    String s = "Hello!";
    return s;
}

Тогда, при вызове в коде, вы сможете присваивать возвращаемые методом значения переменным, имеющим тип, совпадающий с возвращаемым методом, либо наследуемым от него:

String st = myMethod();

Или же:

public static void main(String[] args) {
    MyClass a = new MyClass();
    MyClass b;
    b = a;
}
class MyClass {
    MyClass() {}
}

2) Ключевое слово new означает создание экземпляра класса, таким образом вы вызываете конструктор.

3) Изначально вы вводите строку String s1 = br.readLine(), а значит, оперировать с ней, как с double, у вас не получится, для этого нужно привести её к типу double, ибо в строке может содержаться что угодно.
Переменную x2 вы изначально объявляете как double, а при инициализации присваиваете ей также double значение.

4) Этот вопрос может касаться не только работы Java-программистом, а вообще любой работы, и является слишком общим.

5) Этот вопрос тоже является слишком общим. Вот первый же ответ из поиска в google: https://habrahabr.ru/post/153373/. Но всё же, от себя Head First Java от O'Reilly Media, чтобы понять основы, вам будет более чем достаточно.

Насчёт первых трёх вопросов: вся эта информация общедоступна, находится очень легко и быстро в интернете. Найдите нормальное руководство, хорошую книжку, туториал, читайте документацию. Заданные вами вопросы слишком элементарны, и если бы каждый задавал, не стараясь найти эту информацию сам, было бы не очень хорошо.

Answer 2
  1. void значит "пустота", "пустой" это значит что функция, в данном случае main не возвращает значение после конца выполнения" - прочитал я в интернете, но не очень понял, что к чему, хотел бы увидеть пример/сравнение с функцией, которая возвращает значение.

В Java, законченную последовательность действий, направленных на решение некоторой задачи, принято называть методом, а не функцией, как, например, в C++.

Пример метода, который имеет возвращаемое значение:

private static int inc(int value) {
    return ++value;
}

Где-то в коде Вы можете вызвать этот метод и получить из него значение:

int incValue = inc(1);
  1. Не до конца разобрался со строчкой вызова BufferedReader, для чего пишется "new" и для чего нужен текст в скобках (new InputStreamReader(System.in));

Оператор new используется для создание объекта. Здесь создается объект класса InputStreamReader с помощью конструктора, куда передается объект System.in.

  1. Почему(и для чего, ведь число уже отпарсено в коде раннее) в первом случае мы пишем Double.toString(x1), а во втором - нет?

    System.out.println("x1=" + Double.toString(x1));
    System.out.println("x2=" + x2);

В данном случае, явная конвертация Double -> String не нужна, так как она происходит неявно.

  1. Сложно ли найти работу Java-программисту? Какие затраты по времени, примерно, могут ожидать, чтобы найти первую, пусть и не крутую, но работу. (Если учитывать, что высшего образования нет, я вот только-только закончил школу, и даже не знаю, поступлю ли в ВУЗ).

Хорошему – не сложно. Все очень индивидуально. Можно ориентироваться на год.

  1. Какую литературу посоветуете по Java?

Классика: Шилдт, Эккель, Хорстманн. И ни в коем случае не следует изучать фундаментальные вещи по статьям из интернета и видеоурокам.

А, кстати, лично мне, серия Head First не нравится.

READ ALSO
Как создать модульное android приложение

Как создать модульное android приложение

Например, приложение делится на три модуля: Core, Personal, Client; В Core определены основные библиотеки и методы которые будут переиспользовать остальные...

422
JavaFX BlendMode

JavaFX BlendMode

Создал макет для простого калькулятораДля создания наложения общего градиента на некоторые элементы использовал следующий код :

310
Путь к изображению Java

Путь к изображению Java

Здравствуйте! Есть игра на Java, с использованием картинок

195
Как применить цикл к программе и остановить ее одним символом?

Как применить цикл к программе и остановить ее одним символом?

Как сделать чтобы программа запрашивала ввод номера месяца до тех пор, пока пользователь не введёт символ ‘q’

183