Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Программирование (http://forum.igromania.ru/forumdisplay.php?f=243)
-   -   Java (http://forum.igromania.ru/showthread.php?t=114436)

OneHalf 04.10.2010 10:21

Java
 
Java (должно произносится Джава, но используется и Ява) — объектно-ориентированный язык программирования. Разработан в компании Sun Microsystems в 1995 году (теперь поддерживается компанией Oracle).

Особенностью этого языка программирования является то, что программа компилируется не в коды процессора, а в специальный байт-код, который потом исполняется виртуальной ява-машиной. За счет этого достигается кросплатформенность: программы написанные на Java запускаются и одинаково работают и в Windows и Linux и MacOS и т.д. без изменений исходного кода.
От аналогичного подхода к компилации в .NET отличается тем, что в Java виртуальная машина выполняет инструкции байт-кода, а в .NET программа "докомпилируется" перед запуском.

Платформа Java подразделяется на три типа:
  • Java Micro Edition - версия языка для программирования мобильных устройств. За счет независимости программы от платформы, Java охватила огромную долю мобильников, в результате чего программа написанная на JavaME будет работать одинаково на разных мобильниках.
  • Java Standart Edition - версия для компьютеров.
  • Java Enterprise Edition - версия для приложений масштаба предприятия. Включает в себя работу с базами данных, web сервисами, прочими клиент-серверными примочками и так далее.

К языку прилагается огромное количество библиотек на все случаи жизни: от 2D и 3D графики, до баз данных и криптографии.

Библиотеки Java:
Скрытый текст:
  • Swing - стандартная библиотека визуальных элементов (кнопки, чекбоксы и т.д.)
  • Java2D и Java3D - графические библиотеки. Java2D используется для собдания собственных графических компонентов (особенно если требуется масштабирование, отрисовка текста под наклоном и т.д.) Java3D используется, соответственно при создании трехмерных приложений.
  • JCE, JAAS, JSSE - библиотеки реализации криптографии, аутентификации и авторизации, поддержки протокола SLL соответственно.
  • JDBC - работа с базами данных.
  • JNI - интерфейс взаимодействия с программами, написанными на других языках.
  • RMI, Jini - вызов удаленных методов (т.е. запуск функций на других компьютерах сети)
  • JXTA - создание peer-2-peer приложений
  • И еще туева хуча плюшек для сетевого взаимодействия, сервлетов и прочего. (Список есть тут)

Arantar 06.10.2010 17:52

Код:

public class HelloWorld
{
  public static void main(String[] args)
  {
    HelloWorld hw = new HelloWorld();
    hw.showString();
  }
  public void showString()
  {
    System.out.println("Hello, World!");
  }
}

Покажите, пожалуйста, на этом простейшем примере (язык Java), как сделать так, чтобы выводились в результате русские символы. И как вообще сделать так, чтобы потом можно их было спокойно использовать?

OneHalf 06.10.2010 19:24

А в чем проблема то? В яве все по умолчанию в utf-8 и проблем быть не должно. И как именно ты хочешь "потом их спокойно использовать"?

Arantar 06.10.2010 21:29

OneHalf, у меня вместо русских букв кракозябра в командной строке получается.

OneHalf 06.10.2010 22:56

Хе хе, похоже дело в том, что виндовая консоль понимает только кодировку cp866, а ява хочет туда вывести utf.

Можно сделать так:
Код:

package javatest;

import java.io.UnsupportedEncodingException;

public class HelloWorld {

    public static void main(String[] args) {
        HelloWorld hw = new HelloWorld();
        hw.showString();
    }

    public void showString() {
        try {
            System.out.println(new String( "Привет, мир!".getBytes("Cp866"))); // Перекодировка
        }
        catch (UnsupportedEncodingException uee) { // Приходится перехватывать это исключение :(
            System.out.println("Hello, World!");
        }
    }
}

(написано по образу и подобию этой статьи: http://citforum.ru/internet/javascript/java_rbint.shtml)

Никогда не запускал раньше программы из консоли, и все результаты всяческих
System.out.println("бла-бла")
видел только внутри NetBeans, где они отображаются правильно.

Arantar 06.10.2010 23:05

Цитата:

Сообщение от OneHalf (Сообщение 8527899)
Никогда не запускал раньше программы из консоли

Сам бы рад, но обстоятельства. И с почином, кстате.


Что-то не выходит, выдаёт следующее, будем думать...

OneHalf 07.10.2010 19:22

Возможно нужно убрать или переименовать пакет в строке

"package javatest;"

(Это у меня так пакет назывался.)

Arantar 13.10.2010 00:15

Посоветуйте хороший учебник по Java, пожалуйста.

OneHalf 13.10.2010 01:52

Во всех учебниках одно и тоже пишут. Лично я всегда придерживаюсь такой концепции изучения языков:
1. Накачать кучу учебников
2. Изучить самый тонкий
3. Начать писать какую-нибудь большую программу (когда я изучал Java, я писал прогу по расчету шума от вентиляции (на работе акустикой занимаюсь)). Тут главное масштабность и разнообразие необходимых методов программирования, а не сама программа.
4. Успеть понять, что нифига в языке не понятно.
5. Писать программу как можешь, постоянно заглядывая в самый толстый учебник и гугл
6. Периодически просматривать написанный код и, в случае необходимости, переписывать с учетом приобретенных знаний
7. Можно считать себя знатоком языка, если переписал свою программу почти целиком пару раз :)

Последнее утверждение эмпирическое, но примерно так у меня было со всеми языками:
  • На Бейсике я писал ханойские башни в графике.
  • На Паскале - программу тестирования (даже заработал с ней первое место на конкурсе ДЮЦ'а своего города)
  • На ассемблере я писал вирусы под ДОС. Очень увлекательное, кстати, занятие, кубики рубика нервно курят в сторонке.
    То как я сокращал размер вируса с трех килобайт до 866 байт останется в моей памяти как самое яркое воспоминание о программировании школьных лет. (Еще бы, несколько месяцев на это потратил)
  • На PHP+MySQL+AJAX+HTML+CSS - совсем недавно пытался написать сайт университетской группы с кучей фишек. (Сайт забросил, ибо PHP и Ко выучил, а дальше допиливать свой движок не стал, ибо кому надо, заюзают какую-нибудь CMS, а я больше не учусь)
  • На яве писал прогу по распространению шума по вентиляции
  • На С++ - программу микроконтроллера для диплома (аж для неконтактного взрывателя торпеды)
  • На MatLab программа расчета отраженных электромагнитных сигналов от циллиндрических/эллипсоидальных объектов в морской воде. (Тоже для диплома)

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

Некоторые языки воспринимаются легко и без таких методов. Например, С# создавался почти как клон явы, и отличается совсем чуть-чуть. (Зная только C# или яву, можно легко читать листинги другого языка)

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

lorin 13.10.2010 20:05

Естъ небольшая проблемка.
Нужно соединитъ два массива вместе используя System.arraycopy()
т.е. приципить один к концу другого.
На сколько мне известно, изменять размер существующего массива нельзя, т.е. следующий код не пройдет:
Скрытый текст:
Код:

public class Auf54 {

        /**
        * @param args
        */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[] iErsteStappel = {6,7};
                int[] iZweiteStappel = {1,2,3,4,5};
                System.arraycopy(iErsteStappel, 0, iZweiteStappel, iZweiteStappel.length, iErsteStappel.length);        //funkt nicht wegen den Array-Groessen.
                for (int i=0; i<iZweiteStappel.length; i++ )
                {
                        System.out.println(iZweiteStappel[i]);
                }

        }


можно ли как-то обойти это ограничение, кроме как создать третий массив с размерностью равной сумме размерностей первых двух и скопироватъ сначала первый, а затем второй?
т.е. кроме как так:
Скрытый текст:
Код:

public class Auf54 {

        /**
        * @param args
        */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[] iErsteStappel = {6,7};
                int[] iZweiteStappel = {1,2,3,4,5};
                int iALaenge=0;
                iALaenge=iErsteStappel.length+iZweiteStappel.length;
                int[] iZusammen = new int[iALaenge];
                System.arraycopy(iZweiteStappel, 0, iZusammen, 0, iZweiteStappel.length);
                System.arraycopy(iErsteStappel, 0, iZusammen, iZweiteStappel.length, iErsteStappel.length);
               
               
                for (int i=0; i<iZusammen.length; i++ )
                {
                        System.out.println(iZusammen[i]);
                }

        }

}


OneHalf 13.10.2010 20:51

Нельзя. При создании массива под него выделяется память, размер которой изменить нельзя. Так что если нужны именно массивы, то нужно создавать новый с нужным размером.

Но можно еще использовать коллекции. Это классы, которые могут хранить переменное количество элементов, запрашивая, если нужно, у ОС новые куски памяти при изменении набора элементов.
В таком случае можно будет даже использовать цикл типа:

for(Integet n : Коллекция<с типом Integer>) {
...
}

lorin 13.10.2010 23:17

OneHalf, да, я в курсе, потому и удивился заданию. Буквально:
имеется два массива array, нужно к первому прицепить второй, а ко второму первый и все это при помощи метода System.arraycopy()

При этом логически я допускаю что во-первых содержимое массивов должно оставаться без изменений, т.е. если в массиве X элементов, то все они должны остаться, даже если это нули. Ну а во-вторых если я создам третий массив, то это уже формально будет не первый.
Единственное можно после создания третьего массива, содержащего объедененные элементы первого и второго, поменять указатели последних на третий. Но формально это тоже не является объединением массивов.

Вобщем я считаю, что задание сформулированно некорректно.
Следующим заданием по скрипту бы было увеличение заданного array of integer на 10 integer элементов при помощи того же метода. И тут мне тоже ничего иного в голову не идет, кроме как повторения предыдущей песни, но с пустым вторым массивом на 10 элементов.

Задания начального уровня, подразумевается, что обучающийся только познакомился с имплементацией массивов и метода System.arraycopy().

Arantar 20.10.2010 22:33

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

class VESNA{
public static void main
(String[] args){
String s1;
s1=args[0];
if ((s1=="december")|| (s1=="january")||(s1=="february")) s1="winter";
if ((s1=="march")||(s1=="april")||(s1=="may")) s1="spring";
if ((s1=="june")||(s1=="july")||(s1=="auguest")) s1="summer";
if ((s1=="september")||(s1=="october")||(s1=="november")) s1="autumn";
System.out.println(s1);
}}


OneHalf 21.10.2010 00:27

Сравнивать строки надо так:
Код:

if (s1.equals("december"))
    doSomeThing();

Иначе программа сравнивает адреса строк в памяти, а не их содержимое

lorin 24.10.2010 15:14

Arantar, плюс, хоть это и очевидно и думаю не имеет отношения к проблеме, нет ввода данных для s1

xine 24.10.2010 16:09

Цитата:

Сообщение от lorin (Сообщение 8593893)
нет ввода данных для s1

Есть:
Цитата:

s1=args[0];

lorin 24.10.2010 18:02

Цитата:

Сообщение от xine (Сообщение 8594102)
Есть:

Да, точно. Пропустил шапку.

OneHalf 13.11.2010 17:43

Умеет тут кто-нибудь юзать JasperReports и iReport ? Мне бы какую-нибудь краткую справку почитать, а то никак не могу понять как это должно работать.

Arantar 24.11.2010 18:27

Факториал на Java и на VBA как представить?

OneHalf 02.12.2010 08:51

Библиотеку JGraphX тоже никто не использовал?

Arantar 07.01.2011 18:01

Собственно задание:
Дан упорядоченный по неубыванию массив A из N чисел и число X. Получить массив B, вставив X в A так, чтобы B был упорядочен по неубыванию.

Nickolyan 06.06.2011 13:47

Подскажите хорошую книжку для только начинающих изучать джаву.

CrazyPunk 12.07.2011 13:48

Nickolyan, Кей Хорстманн. "Java2. Основы" Вроде неплохая книжка. Всё довольно подробно расписано.

M1ghtMortal 12.08.2011 18:57

Подскажите как сделать окно выбора папки. Использую Swing. Нашел только вызов окна выбора файла.

lorin 14.08.2011 05:11

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

M1ghtMortal 14.08.2011 21:15

lorin, нет, мне нужно будет в этой папке найти файлы(дальше уже с ними работать, но это уже другой разговор). Сразу скажу что нужно будет искать на любой глубине, но поиск я надеюсь сам напишу.

Hast 14.08.2011 23:17

M1ghtMortal, эмм... Я не понял.

Цитата:

Сообщение от M1ghtMortal (Сообщение 9600310)
Нашел только вызов окна выбора файла.

Цитата:

Сообщение от M1ghtMortal (Сообщение 9606101)
мне нужно будет в этой папке найти файлы

Ват?

lorin 17.08.2011 16:49

M1ghtMortal, то есть тебе нужен аналог ls на java?
Смотри в сторону класса java.io.File
и его методов
isDirectory()
listFiles()


Примерчик:
Код:

import java.io.File;

public class FileTest {

        public static void main(String[] args) {
       

                File[] rootList = File.listRoots();                //получаем список корневых каталогов. Альтернативно можно самому задать объект типа File с путем к нужной папке в конструкторе

                for (File root : rootList) {                                //для каждого элемента в rootList
                        File[] fList = root.listFiles();                //ищем все файлы/папки что есть(возможно не проверяются скрытые, хз)

                        for (File fileIterator : fList) {                //печатаем в консоль путь к найденым файлам/папкам
                                System.out.println(fileIterator.getAbsolutePath());
                        }
                }

        }

}

Чтобы работать с найденными файлами(например считать их построчно) используй scanner

Knez 20.11.2011 08:44

дайте, плиз, ссылку на настроенный Eclipse.

M1ghtMortal 20.11.2011 16:43

Knez, А что в настраивать то? Качай с офф. сайте, если что конкретно тебе нужно, то сам настроишь, ведь люди не знают что тебе нужно.

Knez 20.11.2011 20:43

M1ghtMortal, не знаю, что качать....скачал Eclipse IDE for Java Developers верно? а он не запускается(

M1ghtMortal 20.11.2011 20:46

Knez, Ошибку какую-нибудь выдает? С офф. сайта качаешь? Какая ОС?

Knez 21.11.2011 06:18

M1ghtMortal, да с оф.сайта. ОС - 7 64 битная. Ошибка - JRE or JRD must be available in order to run eclipse. я так понимаю надо ещё что-то скачать, но я ж вроде уже скачал IDE специально для Java..

CrazyPunk 21.11.2011 06:40

Knez, до кучи скачай и поставь JDK, JRE, JRD

M1ghtMortal 21.11.2011 11:27

CrazyPunk, Что за JRD? Я без него нормально Eclipse на винде запускал.

lorin 27.11.2011 22:49

Knez, если знаком с английским - тут решение:
http://stackoverflow.com/questions/2...irtual-machine

Mad-21 03.05.2012 00:31

Задали написать курсовую по Modernizr. Есть какие-нибудь русскоязычные источники по этому поводу? Заранее спасибо.

CMETAHA 03.05.2012 00:53

Mad-21, Это же не Java, а JavaScript вроде?

На офф сайте всё вроде достаточно подробно расписано.

nikitakress 12.11.2012 23:06

Можете подсказать, как сделать так, чтобы значение у переменной сохранялось после выхода из цикла/if(else) и тп. А то создаю локальную переменную в методе класса, и не могу понять, почему, если по идее она должна быть инициализирована в, например цикле, то после этого цикла мне выдаётся ошибка о том, что локальная переменная не объявлена? Можно ли сделать как в С++? Там я прекрасно помню, массив можно было задать одним циклом, а считать другим.

Nikolay 13.12.2015 21:40

Ребят. Вопрос. Windows 10 не могу установить Java SE D Kit 8u65(качаю с сайта oracle версию для x64 систем windows). "Чтобы найти версию для вашего компьютера, обратитесь к издателю приложения". Невозможно запустить приложение на вашем пк. x64.
Что делать?

pokibor 14.12.2015 08:37

Вариант 1. Снести к чертям десятку
Вариант 2. Поставить виртуальную машину и установить на неё. У того же Оракла есть Virtual Box (причём на сайте можно скачать уже готовые виртуальные машины), хотя тоже не факт, что заработает.
Вариант 3. Запустить в режиме совместимости, если он остался в десятке. Возможно, проблема просто в идентификации ОС, и это поможет.
Вариант 4. Попробовать поставить 32-х битную версию.
Первый вариант самый правильный и надёжный. Подробнее не подскажу, т.к. десятку не ставил по очевидным причинам.


Часовой пояс GMT +4, время: 21:53.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.