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

Форум Игромании (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 09: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 16: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 18:24

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

Arantar 06.10.2010 20:29

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

OneHalf 06.10.2010 21: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 22:05

Цитата:

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

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


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

OneHalf 07.10.2010 18:22

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

"package javatest;"

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

Arantar 12.10.2010 23:15

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

OneHalf 13.10.2010 00:52

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

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

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

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

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

lorin 13.10.2010 19: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 19:51

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

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

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

lorin 13.10.2010 22:17

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

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

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

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

Arantar 20.10.2010 21: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 20.10.2010 23:27

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

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

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

lorin 24.10.2010 14:14

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

xine 24.10.2010 15:09

Цитата:

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

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

s1=args[0];

lorin 24.10.2010 17:02

Цитата:

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

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

OneHalf 13.11.2010 16:43

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

Arantar 24.11.2010 17:27

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

OneHalf 02.12.2010 07:51

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


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

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