пятница, 30 января 2015 г.

JButton и как сделать программу окошком с картинкой

ОХ ТЯЖЕСТЬ
Создаем класс GUI
импорт всех этих библиотек
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

далее по сценарию:
public class GUI extends JFrame{ - встроенные JFRAME 
private JButton reg; - создаем 2 переменныех reg И custom - кнопки(JButton Тоже встроено
private JButton custom;
public GUI(){ создаем метод
super("the title");  - супер как мы помним это то, что отображается на окне- типо ярлычка с надписью
setLayout(new FlowLayout()); - стандартный лэйаут
reg= new JButton("Press regular"); - пишем что будет на обычной кнопке
add(reg); - добавляем
И ТУТ ИНТЕРЕСНОЕ
Icon b=new ImageIcon(getClass().getResource("2269072(39x26).png")); подключаем иконки которые будут на кнопке CUSTOM( добавляем картинки так- находим где workspace и кидаем в нужный нам package-src картинки 40х40 png. и потом в эклипсе обновляем refresh src И вуаля они там

Icon x=new ImageIcon(getClass().getResource("2269072(40x27).png")); - тоже самое для другой картинки- которая будет rollover
custom = new JButton("Custom", b); - Jbutton встроена- устанавливаем значение custom- потому что в кавычках- надпись, и b- это иконка
custom.setRolloverIcon(x); - эта строчка настроит ролловер то есть когда наводим курсор
add(custom); - не забываем добавлять
}
}
Далее нам нужно сделать что б что-то происходило

и мы создаем новый класс в классе GUI(тут будет пока ошибка на полях выскакивать- ничо страшного)

HandlerClass handler= new HandlerClass(); создали новый класс to handle the events when we click buttons
reg.addActionListener(handler); - добавляем листнер на обычную кнопку
custom.addActionListener(handler); - и на кастом кнопку
}
все, что здесь описано - мы сделали конструктор
Дальше поступаем так:
создаем новый класс вне конструктора что бы что-то хоть происходил
о и он будет прайват
             private class HandlerClass implements ActionListener{    дада мы можем создавать классы внутри классов(этот класс будет использован в конструкторе при запуске проги)
implement means that we want to use your class in our methods.but we have to override it

              public void actionPerformed(ActionEvent event){   создаем метод, который будет сообщать чего мы хотим когда нажимаем на buttons
               JOptionPane.showMessageDialog(null,String.format("%s", event.getActionCommand()) ); } - we want a window to popup, and show message dialog with parametrs(null-positioning,.String.format-puts string on a screen, "%s" just gives spase, and event.getActionCOmmand)
}
Идем в класс ЭППЛС
импорт
import javax.swing.JFrame; что б использовать окна
class apples {
public static void main(String[] args){
GUI go=new GUI();  - подключаем класс гуи
go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);- указываем как закрыться программе
go.setSize(300,200); - размеры окна
go.setVisible(true); - прозрачность- boolean- либо да либо нет.
}
и результат:



Simple polymorphic program

ПОлиморфизм шо это помним? Ага, когда наследуется метод и тд.
пример
суперкласс
public class Animal {
public void noise(){
System.out.println("animals dont make noise");
}
}
подклассы
public class Fish extends Animal {
public void noise(){
System.out.println("slurp");
}
}
public class Dog extends Animal{
public void noise(){
System.out.println("guh");
}
}
и класс MAIN
class apples {
public static void main(String[] args){
Animal[] the list=new Animal[2];  - создаем эррэй типа Энимал, который будет еще и фищ и дог потому что те его экстенд
         Dog d=new Dog();  - и создаем 2 объекта дог и фиш
         Fish f=new Fish();
}
}
результат
guh 
slurp 

Class to hold Objects! and ARRAY HOLDING many objects


 Создаем новые кассы. dog, fish, animal
создаем класс dogList  и ниже в картинках что и как


ARRAY HOLDING many objects

Карочи
нам нужно создать единый лист, где будут отображены все классы. помним- animal- суперкласс, dog & fish extends it, so, создаем единый лист- AnimalList. и уже в нем создаем массив array- 
public class AnimalList {

private Animal thelist=new Animal[5]; - ОЧЕНЬ ВАЖНО ЗДЕСЬ МЫ ИСПОЛЬЗУЕМ ANIMAL а не ANIMAL LIST
}
создаем counter variable
private int i = 0;
и далее уже сам метод
public void add(Animal a){   -so now it takes 1 perametrs animal object 
if (i<thelist.length){    - 5 in this case
thelist[i]=a;      
System.out.println("animal added at index "+i);
i++;
so each times it runs it changes the counter variable
идем в класс MAIN- у нас apples И пишем след
class apples {
public static void main(String[] args){
AnimalList ALO=new AnimalList();   - создаем объекты
Dog d = new Dog();  -создаем объекты
Fish f= new Fish();    - создаем объекты
ALO.add(d);    - вызываем метод из класса AnimalList
ALO.add(f);   - вызывает метод из класса AnimalList
}
}
результат вывода
animal added at index 0
animal added at index 1
















ABSTRACT AND CONCRETE CLASSES -58

Abstract is a class that you cannot create objects from, but it can be usefull for things such as inheritance and polymorphism.By the way METHODS CAN BE ABSTRACT TOO!- is a method that must be overriden.
public abstract void eat(); - ему не нужно тело, Раз в туне есть вот это
public class tuna extends food{
void eat(){
System.out.println("This tuna really is great");
}
раз используется абстрактный метод, класс ОБЯЗАН быть тоже абстрактным!
И раз мы в суперклассе сделали абстрактный метод публичным, то он должен быть публичным в классе, который продолжает суперкласс.
Суперкласс может быть абстрактным, но метод не обязан.
Но если есть абстрактный метод- класс должен быть абстрактным тоже.
any time you have an abstract method in a superclass, the subclass that extends that superclass- has to use that method also(implement, override)

concrete class that is specific anought that can create an object

четверг, 29 января 2015 г.

Override and Overload / abstract

Override- Это например у нас есть суперкласс и два подкласса которые его экстенд.
например в суперклассе написано след.
public class food {
void eat(){
System.out.println("This food is great");
}
а в подклассах, которые его экстенд тоже самое но с измененным текстом
public class potpie extends food{
void eat(){
System.out.println("This potpie is great");
}
карочи
представим что у нас есть комп игра, в которой есть босс и есть прихвостни.
Вот суперкласс- это босс, а прихвостни это подклассы которые экстенд этот суперкласс
то есть в боссе будут такие плюшки как рост, сила, количество хп и тд
мы наследуем все это в прихвостнях, Но с некоторыми изменениями. Например нам нужно будет сделать им гораздо меньше хп- вот в подклассы мы экстенд суперкласс- и унаследуем все, что есть у босса, НО С изменениями в ХП- просто перезапишем. НО! перезаписываемый метод не должен менять своей сути, то есть если у нас метод с интегралами в суперклассе, он должен быть с интегралами и в подклассе. если нет аргументов у метода в суперклассе, значит не должно их быть и в подклассе. это важно!

Overloading- это метод с таким же именем, но с другими аргументами.
например вот тут
public class potpie extends food{
void eat(int x){ вот тут мы можем добавить другие аргументы, но тогда это будет абсолютно другой метод

ABSTRACT CLASS- means is that you can not create an object from that class, but you can use that class for things like inheritance , polimorphism , and stuff like that .example is FOOD class- its general, but nothing specific, and you dont want anybody to change that.





Polymorphism

Полиморфизм — одна из трех основных парадигм ООП. Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. http://java-course.ru/begin/polymorphism/
Полиморфизм как бы группирует однотипные классы под одним "интерфейсом".
Пример
public class food {
void eat(){ - создаем метод
System.out.println("This food is great");
}

}
public class potpie extends food{
void eat(){
System.out.println("This potpie is great"); - оверрайт метода из фуда делаем своим текстом
}
}
public class tuna extends food{
void eat(){
System.out.println("This tuna really is great");-так же оверрайд фуда
}
}
class apples {
public static void main(String[] args){
food bucky[]=new food[2]; - создаем ARRAY 
bucky[0]=new potpie(); - 1 эррэй
bucky[1]=new tuna(); -2 эррэй
for(int x=0; x<2; ++x){ - фор луп
bucky[x].eat();
}
}
}
И результат такой:
This potpie is great
This tuna really is great

So, basically polymorphic arrays are a way to extent the idea of the class hierarchy? You're array being cast as a superclass type lets you hold an infinite number of subclass types, each with their own unique behavior.  
Basically Polymorphism is were you have a basic class with all of the details. And your polymorphic classes and methods are those who take those variables and the data and change them (morph) to be that thing by adding the specific details that make up the thing (For example Skin Sinze And Attack Method)
----------------------------------------------------------------------------------------------------------------------------------------------------------------

ЕЩЕ 1 очень странная штука, которую объяснить крайне сложно
polymorphic arguments
создаем еще 1 класс fatty например
public class fatty {

public void digest(food x){   -- eat уже нельзя использовать т.к. в употреблении
x.eat();   -указываем какой метод будет использован
}
}
идем в класс apples и начинается интересное
class apples {
public static void main(String[] args){
fatty bucky=new fatty();   - создаем объект bucky что б можно было использовать все в классе фэти
food fo=new food();   -это для метода дайджест, потому что фуд обжект как аргумент взял
food po=new potpie(); -это сабкласс класса суперкласс фуд
bucky.digest(fo);         - колл баки обжект with digest as the food object as my argument
bucky.digest(po);         -called potpie object as my argument
}
}
РЕЗУЛЬТАТ:
This food is great
This potpie is great













среда, 28 января 2015 г.

Event Handler -- Action Listner -- 52-53-54

events на компьютерном языке- юзер может подвигать мышкой, нажать энтер, тыкнуть на кнопку и тд what user does
event handler- это код, который responds to mouse movement and etc.  what computer does when the user clicks etc.
and this overall process is called an EVENT HANDLING

начинаем в майнор классе с импорта библиотек
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;   ----- lets us use windows
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;

public class tuna extends JFrame{  // extends JFrame- means it lets us use a window
private JTextField item1; - cоздаем окна 1
private JTextField item2; -окно 2
private JTextField item3; - окно3
private JPasswordField passwordField; - создаем парольное поле
public tuna(){  - создаем конструктор
super("HELLO PUPSIK");   - заголовок окна
setLayout(new FlowLayout()); -- стандартный лэйаут
item1=new JTextField(10);--- 1 окошко 10 пикселей
add(item1); - добавляем его
item2=new JTextField("enter text here");--- второе окошко с надписью
add(item2); - добавляем
item3=new JTextField("uneditable", 20); - 3 окошко с надписью определенной величины
item3.setEditable(false); - это делает так, что б его нельзя было редактировать и чтолибо делать
add(item3);- добавляем
passwordField=new JPasswordField("pass"); - последняя прайват переменная у нас парольная
add(passwordField); - добавляем
}

}
}

--------------------------------------------------------------------------------------------------------
ЭТО БЫЛА ПЕРВАЯ ЧАСТЬ ПОСТРОЕНИЯ ИНТЕРАКЦИОННОГО ОКОШКА
----------------------------------------------------------------------------------------------------------
ТЕПЕРЬ
нам необходимо добавить в туну Action Listener и thehandler- штука отвечающая за реакцию на вводимую человечишками херню


thehandler handler = new thehandler();
item1.addActionListener(handler);
item2.addActionListener(handler);
item3.addActionListener(handler);
passwordField.addActionListener(handler);

}
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String string=" ";
if(event.getSource()==item1) - if they type something is here
string=String.format("field1:%s", event.getActionCommand()); -we gonna put whatever they typed in and write field 1: blah blah
else if (event.getSource()==item2)
string=String.format("field2:%s", event.getActionCommand());
else if (event.getSource()==item3)
string=String.format("field3:%s", event.getActionCommand());
else if (event.getSource()==passwordField)
string=String.format("passwordField:%s", event.getActionCommand());
JOptionPane.showMessageDialog(null, string); - создаем окно
}
}



ЭТО ТРЕБУЕТ ДОРАБОТКИ ВСЕ








GUI !! and GUI with JFRAME

Graphic User Interface Finally something fun :)

первым делом нам нужно сообщить яве что будем использовать javax и подключаем ее
import javax.swing.JOptionPane;
далее создаем сообщения которые будут в диалоговых окнах
class apples {
public static void main(String[] args){
String fn=JOptionPane.showInputDialog("enter first number"); - как только мы введем число и нажмем в появившемсся диалогом окне ОК - она будет сохранена в значении fn
String sn=JOptionPane.showInputDialog("enter second number"); - как только введем число и нажмем ОК- число будет сохранено в переменной sn
since мы создали переменные STRING- они не могут вычисляться, нам нужно что б значения вводимые были интегралами

int num1=Integer.parseInt(fn); - как только мы нажимаем ок в окошках, значение String преобразуется в интеграл
int num2=Integer.parseInt(sn);
теперь создаем переменную складывания из предыдущих уже интегралов
int sum=num1+num2;

теперь создаем финальное диалоговое окно где
NULL- позиция всплывающего окна
the sum is + sum - это то, что будет отображаться в окошке надписью,
THE TITLE- то, что будет отображено в названии окошка
и JOptionPane.PLANE_MESSAGE это позволяет добавлять иконки в интерфейс- но тут мы без них поэтому и плэйн

JOptionPane.showMessageDialog(null, "the sum is"+ sum, "the title", JOptionPane.PLAIN_MESSAGE);

}
}


GRAPHIC USER INTERFACE WITH JFRAME
______________________________________________________

работает с двумя классами: apples and tuna
в класс туна сначала нужно импортировать библиотеку
import.java.aws.FlowLayout; - это будет отображать как вещи расположены default layout managing
import javax.swing.JFrame;- это будет отвечать за то, basic windows features title bar, minimize, close, x etc.
import javax.swing.JLabel; - это позволяет текст, картинки
далее нам необходимо сообщить что данный класс будет наследовать возможности JFrame- подключаем:

public class tuna extends JFame{
создаем переменную типо JLabel 
private JLabel item1;
и далее конструктор:
public tuna(){ super("The title bar"); - супер это тайтл бар( и надпись которую он передает) setLayout(new FlowLayout()); -----(это лайаут)
item1=new JLabel("this is a sentance"); - указываем что айтем1- это окошко 1, И надпись item1.setToolTipText("this is gonna show up on hover"); - это то, что будет всплывать при наведении курсора add(item1); -- и для того, что б это все заработало обязательно нужно сделать ADD этого всего - то есть item 1
идем в главный класс apples и подключаем библиотеку jframe
import javax.swing.JFrame;
и начинаем- создаем объект- bucky в туне
class apples { public static void main(String[] args){ tuna bucky=new tuna(); bucky.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - это будет закрывать окошко когда жмем крестик bucky.setSize(275,180);- это размеры окошка bucky.setVisible(true); - это подложка

INHERITANCE наследование и OVERRIDE наследования

где-то тут уже писала об этом. но не суть. ТОЛЬКО ПУБЛИЧНЫЕ МЕТОДЫ МОГУТ НАСЛЕДОВАТЬСЯ из суперкласса!
наследование- пример:
tuna and potpie are gonna inherite all the stuff of a SUPERCLASS food
используется EXTENDS
карочи
у нас есть класс food , и есть классы туна и потпай , мы хотим что б туна и потпай выполняли функции класса фуд.
соответственно код:
public class food {
public void eat(){
System.out.println("I am the eat methods");
}
}
public class potpie extends food{
}
public class tuna extends food{
}
это значит что то, что написано в методах класса фуд- теперь в классах потпай и туна.
Возвращаемся к главному классу apples:
код такой
class apples {
public static void main(String[] args){

tuna tunaObject = new tuna(); --- создаем объекс класса
potpie potObject= new potpie(); ------создаем объект класса
tunaObject.eat();------пишем функцию(смотрим на класс фуд- который нам дает метод EAT)
potObject.eat();
}
}
и результат напечатки на экран будет такой:
I am the eat methods
I am the eat methods

НО ЧТО ЕСЛИ МЫ ХОТИМ ЧТО БЫ КЛАСС ВЫПОЛНЯЛ КАКИЕ-ТО ФУНКЦИИ ИЗ НАСЛЕДУЕМОГО КЛАССА ИНАЧЕ? мы просто перезаписываем то, что нам требуется, а остальные функции будут выполняться как в суперклассе:
пример:
public class tuna extends food{
public void eat(){
System.out.println("I am the new method of tunas");- просто OVERRIDE сделали метода. 
}
}
результат:
I am the new method of tunas













Final

final= это значит, что как только мы дали ему значение, Оно не изменится
вот пример
public class tuna{
private int sum;   - создаем переменную сам
private final int NUMBER; - создаем переменную FINAL INT и имя переменной должно быть капсом

public tuna(int x){ - здесь создаем временную переменную икс
NUMBER=x; - и приравниваем иск к намберу
}
public void add(){ - здесь создаем метод приплюсовки что сам будет равен саму плюс намберу
sum+=NUMBER;
}
public String toString(){   - и создаем метод напечатки
return String.format("sum =%d\n", sum); sum= пробел и уже число
}
}
идем в класс apples
class apples {
public static void main(String[] args){

tuna tunaObject=new tuna(10); - создаем объект туны и устанавливаем значение 10 pass the parameter 10 for the constructor and set number equal to ten( ТЕПЕРЬ NUMBER = 10!!)
for(int i=0;i<5; i++){  - создаем фор луп - количество строк с нуля, пока не будет их пять, и каждый раз прибавлять по 1
tunaObject.add(); - и что ж мы тут делаем? мы делаем метод add из класса tuna 5 раз
System.out.printf("%s", tunaObject);- и 5 раз вывели
}

}
}

Static

статик- это когда всем объектам нужно share одну переменную
вообщем: представим что у нас есть какой-то клуб, и нам нужно посчитать сколько там людей. количество людей и есть статик- то, что все они делят
Соответственно вот код для туны:
public class tuna{
private String first; - создаем переменные имя
private String last; - создаем переменные фамилия
private static int members=0;  - создаем переменную члены клуба- и это интеджер(он общий потому что статик)
public tuna(String fn, String ln){   - задаем аргументы для публичного метода
first=fn;   - приравниваем
last=ln;
members++; - счетчик помним начинаетсяя с нуля- но с каждым членом увеличивается на 1!
System.out.printf("Constructor for %s %s, member of the club: %d\n", first, last, members);
}
и для эпплс: 
class apples {
public static void main(String[] args){
tuna member1=new tuna("Megan", "fox");
tuna member2=new tuna("Natalie ", "portman");
tuna member3=new tuna("Tailor", "swift");
}
}
результат:
Constructor for Megan fox, member of the club: 1
Constructor for Natalie  portman, member of the club: 2
Constructor for Tailor swift, member of the club: 3


и еще можно во как сделать:
,берем старый пример и просто дополняем его
public class tuna{
private String first;
private String last;
private static int members=0;

public tuna(String fn, String ln){
first=fn;
last=ln;
members++;
System.out.printf("Constructor for %s %s, member of the club: %d\n", first, last, members);
}

public String getFirst(){
return first;
}
public String getLast(){
return last;
}
public static int getMembers(){
return members;
}
class apples {
public static void main(String[] args){
tuna member1=new tuna("Megan", "fox");
tuna member2=new tuna("Natalie ", "portman");
tuna member3=new tuna("Tailor", "swift");
System.out.println();
System.out.println(member2.getFirst());
System.out.println(member2.getLast());
System.out.println(member2.getMembers());
System.out.println();
System.out.println(member1.getFirst());
System.out.println(member1.getLast());
System.out.println(member1.getMembers());
}
}
и на выходе имеем результат
Constructor for Megan fox, member of the club: 1
Constructor for Natalie  portman, member of the club: 2
Constructor for Tailor swift, member of the club: 3

Natalie 
portman
3

Megan
fox
3


то, что жирненькое- добавлено и в результате отображено.
это еще 1 пример использования STATIC- показывает что переменная members- она SHARED между всеми другими переменными введенными в туну.

статическая информация доступна даже тогда, когда нет объекта
код: System.out.println(tuna.getMembers());
результат: 3









ENUMERATION - Требует подробного объяснения Enum SET RANGE

enumeration- это типо как классы, но gonna declare constances(that are also objects pretty much);
 в программировании тип данных, чьё множество значений представляет собой ограниченный список идентификаторов.

package NewBoston;

public enum tuna {
bucky("nice", "22"),
kelsey("cutie", "10"),
julia("bigmistake", "12");

private final String desc;
private final String year;

tuna(String description, String birthday){
desc=description;
year=birthday;
}
public String getDesc(){
return desc;
}
public String getYear(){
return year;
}

}



import java.util.Scanner;

import java.util.*;
class apples {
public static void main(String[] args){
for(tuna people: tuna.values());
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());

ENUM SET RANGE
_________________________________________________________________________


public enum tuna {
bucky("nice", "22"),
kelsey("cutie", "10"),
julia("bigmistake", "12"),
nicole("italian", "13"),
candy("different", "14"),
erin("iwish", "16");

private final String desc;
private final String year;

tuna(String description, String birthday){
desc=description;
year=birthday;
}
public String getDesc(){
return desc;
}
public String getYear(){
return year;
}

}


import java.util.EnumSet;


class apples {
public static void main(String[] args){
for(tuna people: tuna.values());
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
System.out.println("\nand now for the range of constance!!!\n");
for(tuna people: EnumSet.range(tuna.kelsey, tuna.candy));
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
}
}

set range - можно сделать выборку с - до
for(tuna people: EnumSet.range(tuna.kelsey, tuna.candy));
System.out.printf("%s\t%s\t%s\n", people, people.getDesc(), people.getYear());
не забывает подключить утилиту в начале класса
























вторник, 27 января 2015 г.

toString and COMPOSITION

toString
Объяснить крайне тяжело.
КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
}

Результат:

The constructor for this is 4/5/6

COMPOSITION
_________________________________________________________________________________

КОД:

public class potpie {
private int month;
private int day;
private int year;

public potpie(int m, int d, int y){
month=m;
day=d;
year=y;
System.out.printf("The constructor for this is %s\n", this);
}
public String toString(){
return String.format("%d/%d/%d", month,day,year);
}
}
public class tuna {
private String name;
private potpie birthday;

public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;

}
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}

class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}

Результат:
My name is Natasha, my birthday is 4/5/6

Что тут произошло?
в туне создаем две переменные NAME и BIRTHDAY( Где BIRTHDAY передает референс в  potpie object)
private String name;
private potpie birthday;
создаем метод с двумя аргументами и передаем стринговое значение(куда будет линковаться)
public tuna(String theName, potpie theDate){
name=theName;
birthday=theDate;
создаем toString метод без аргументов
в теле делаем возврат формата %s- это будет fill in name и birthday
public String toString(){
return String.format("My name is %s, my birthday is %s", name, birthday);
}
}
и вот где начинается немного жопа
whenever we need a String representation of this "my name is %s" its gonna look for the second part - name,  то есть оно ищет переменную name- которая указана theName и мы ей дали значение в самом верху  в туне. Но вот с BIRTHDAY нет string representation, birthday is just a reference to theDATE object and this means: since its a refrence to an OBJECT and NOT A STRING , anytime it needs a String from an object , it will go to my class(в примере этот класс potpie) and find a toSTRING METHOD and then i can give you the information you need. ///43 урок
далее идем в apples класс и создаем тунаОбжект- с двумя аргементами (Наташа- name, и potObject( в нашем случае он записан в классе potpie как 4/5/6) и потом выводим обьычным принтом тунаобжект
class apples {
public static void main(String[] args){
potpie potObject=new potpie(4,5,6);
tuna tunaObject =  new tuna("Natasha", potObject);
System.out.println(tunaObject);
}
}
результат такой:
My name is Natasha, my birthday is 4/5/6









четверг, 22 января 2015 г.

Public Private THIS

public- ок понятно
private - отображается и используется в том методе, где создано. Значит только методы, находящиеся в одном классе будут видеть и смогут использовать метод private
THIS- если конструктор или любой другой метод использует переменную или имя с Identical to Instance variables.any time you have the same variable in a method java looks through local variables and prints them. if a method contains the local variable the same name as the field name, it will always look for a local. to refer to field variable we use THIS. перед именем переменной
------------------------------------------------------What "this" really is in Java is an object for which you call a method. In this here example "this" is actually tunaObject, because you are using tunaObject to call a method named setTime. It has nothing to do with local variables.
Example1:
public void setTime(int h, int m, int s)
  {
    hour=h;  // same as this.hour=h;
    minute=m;  // same as this.minute=m;
    second=s;  // same as this.second=s;
  }
Example2:
public void setTime(int hour, int minute, int second)
  {
    this.hour=hour;
    this.minute=minute;
    this.second=second;
  }
in Example2 you have to use "this" because your formal arguments are named the same as attributes of the tuna class. It wouldn't make any sense to write hour=hour. The only way to access your attributes in these situations is to use "this". 
КАРОЧИ- картинкой нагляднее и проще!

среда, 21 января 2015 г.

TIME

//MILITARY TIME//-формат 24:24:24
В ВТОРОСТЕПЕННОМ классе создаем прайват переменные час, минута, секунда
Создаем метод setTime(void- since its gonna return something) с переменными h m s
Далее задаем параметры переменным по схеме:
hour=(( переменная h>=0 и h<=24 ведь в сутках 24 часа) спрашиваем так ли это? - то h, если нет :0
и так для каждой переменной m и s;
создаем отдельный метод String(Для дисплея ) - since its gonna return a string toMilitary()без аргументов раз просто ретерн
и в теле пишем return String.format( //помни, FORMAT - требует две переменные) "%02d:%02d:%02d "//- это дисплей 1 в двух decimal points: 2 в двух decimal points: 3 в двух decimal points // , переменные hour, minute, second //раз эти переменным заданы значения методом выше, их можно указать и в стринг ретерне//

ВОЗВРАЩАЕМСЯ В МЭЙН КЛАСС
создаем объект для забора информации из класса туна tuna tuna= new tuna();
теперь можно сделать принтаут tunaObject(берем принтаут из туны ведь).toMilitary( так задано String в методе)
Если запустить программу сейчас- результат такой: 00:00:00
далее мы можем установить время таким образом
берем объект туна
tunaObject.setTime(13,25,8)
и принтаут этого теперь
System.out.println(tunaObject.toMilitary);
и теперь результат такой: 13:25:8

КОД:

public class tuna {
private int hour;
private int minute;
private int second;

public void setTime(int h, int m, int s){
hour =((h>=0 && h<=24) ? h:0);
minute=((m>=0 && m<=60) ? m:0);
second=((s>=0 && s<=60) ? s:0);
}
public String toMilitary(){
return String.format("%02d:%02d:%02d", hour, minute, second);
}
}
class apples {
public static void main(String[] args){
tuna tunaObject= new tuna();
System.out.println(tunaObject.toMilitary());
tunaObject.setTime(13,25,8);
System.out.println(tunaObject.toMilitary());
}

}
------------------------------------------------------------------------------------------------------------------------
//REGULAR TIME// формат 1:30 PM

За пример берем старый шаблон.
Для того, что б перевести время в формат AM/PM необходимо:
в class tuna создать метод String to"" в данном случае 
                    public String toNormal(){
этот метод будет возвращать String.format( раз в ПМ ЭМ только 1 цифра-, для часа пишем %d, для минут и секунд(два десимал) %02d: 
далее задаем условия часу 
(hour == нулю или ==12 ? 12:hour%12)
//то есть программа говорит: ок, если инпут времени 0 или 12, то пусть так и быть будет 12, если нет, то Devide it by 12 и выведи остаток.// то есть если 13, То выведи 1 ПМ, если 8, То выведи 8 ЭМ и тд.//
minute, second, (hour<12?"AM":"PM")) //спрашиваем часов то меньше чем 12? если да, То пиши ЭМ, если нет ПМ))- и тут главное не забывать про закрывание скобок- их много

return String.format("%d:%02d:%02d %s", (hour==0||hour==12)? 12:hour%12, minute, second, (hour<12? "AM":"PM"));
далее возвращаемся в мэйн класс
вызываем tunaObject и используем функцию setTime ( выставляем время
                 tunaObject.setTime(13,27,6);
и принтаут времени( здесь есть строчка с toMilitary для примера отображения времени)
System.out.println(tunaObject.toMilitary());
                  System.out.println(tunaObject.toNormal());


















Variable Lenght Argument(Троеточие- когда не в курсе сколько будет значений(циферок/буковок и тд))


ПРИМЕР:

Нам необходимо найти среднее от перечисленных чисел:
1. создаем класс avrage за пределами класса main
2 в аргументе указываем переменную int ТРИ ТОЧКИ- это значит, что мы не знаем сколько будет чисел, и numbers- имя
3.отчет с нуля
4.Enhanced for loop- переменная икс:numbers
5. указываем тотал+=х
6.делаем ретёрн over numbers.ength.
7.возвращаемся к классу main и в принтауте перечисляем все значения переменной от averag

class apples {
public static void main(String[] args){
System.out.println(average(43,55,76,8,65,77,99));
}
public static int average(int...numbers){
int total=0;
for(int x:numbers)
total+=x;
return total/numbers.length;
}
}
РЕЗУЛЬТАТ:
60

arrays in methods //TABLE for multi arrays

Массивы в методах.
создаем переменную bucky, в который хранятся значения(3-4-5-6- и тд)
далее создаем отдельный метод CHANGE- в котором в скобках дает значение как в enhanced for loop - переменная Х с использованием массива
создаем for loop
создаем переменной условия что к числу(counter) добавляем 5
возвращаемся в основной метод - создаем ссылку на метод change
создаем enhanced foor loop - int y:bucky и делаем принтаут этой переменной

class apples {
public static void main(String[] args){
int bucky[]={3,4,5,6,7};
change(bucky);

for(int y:bucky)
System.out.println(y);
}
public static void change(int x[]){
for(int counter=0;counter<x.length;counter++)
x[counter]+=5;
}
}



Кстати!
Для того что б создавать вывод нескольких массивов используется след схема:

class apples {
public static void main(String[] args){
int firstarray[][]={{8,9,10,11},{12,13,14,15}};
int secondarray[][]={{30,31,32,33},{43},{44,45,46}};
}
}

А СЕЙЧАС НЕЧТО СОВСЕМ НЕ ПОНЯТНОЕ--TABLE FOR MULTI ARRAYS

вспоминаем, мы можем сейчас выводить по несколько массивов- вот пример выше- их 2
class apples {
public static void main(String[] args){
int first[][]={{8,9,10,11},{12,13,14,15}};
int second[][]={{30,31,32,33},{44,45,46}};  //тут понятно

System.out.println("This is first array"); //система выведет на экран что будет надпись
display(first);                                     - эти строчки вызывают метод
System.out.println("This is second array");
display(second);
}
public static void display(int x[][]){    //создаем метод display и указываем что будет переменная х [][]
for(int row=0;row<x.length;row++){  //фор луп- 
for(int column=0;column<x[row].length;column++){    //x[row].lenght- длина строки
System.out.print(x[row][column]+"\t");
}
System.out.println();
}
}

}









OOP //БОЯТЬСЯ НОРМАЛЬНО!

class:fiels и methods(в ООП языках есть свойства и действия)

incapsulation- сокрытие полей(внутреннего состояния)- скрываем внутренее состояние от внешнего мира

inheritance- наследование(см. суперклас- 2 авто: седан и подъемный кран(вроде как разные, но обе же четырехколесные транспортные средства)- след. наследование какое? наследование в том, что есть двигатель, кузов, 4 колеса и тд, ) то есть! наследование это когда 1 объект наследуется от другого(обычно наследуются классы а не объекты) Класс родитель: потомок 1, потомок 2 и тд. В ЯВЕ нет множественного наследования!//Наследование используется для сокрытия какого-то куска кода, реализацию.
В Яве наследование сверху вниз(как семейное древо например: прадед-дед-сын-и тд :то есть наследуется так)
extends //имя класса - но ОБЯЗАТЕЛЬНО в классе должен быть id// { ..}
пример:
1: public class Car
Int mobil
String name
2: Car c= new Car()
c name= "aaa"
3: Class Super
int id
4: extends Super
5: c.id=2 (это уже вписывается в ВТОРОЙ пункт)
Полиморфизм-это когда мы вызываем методы подклассов через методы суперклассов

Overloading - например
public void () {...}
public void (int a) {....}
public void (int a, double b){...}
возможность вызывать методы одинаково, различаться будут лишь тем, что будут разные параметры.

ХОТЯЯЯЯЯЯЯЯЯЯЯЯЯЯ..// да, наверное где-то косякнула

Здесь записано будет много всякого, но оно все нужно. Не обязательно написанное будет относиться именно к теории . Будут пометки и по самой яве тоже

КОНСТУКТОРЫ 
выглядят так:
public class Bike(){
public Bike(){
}
в конструктарах могут быть OVERLOADING
public class Bike(){
public Bike(){
}
public Bike(insta){
}
}
Bike b = оператор new Bike();//нет параметра- вызывается верхняя строчка
                               new Bike(5);// будет вызван оператор соответствующий insta

В Яве есть зарезервированный класс Integer - пишется с большой буквы. Как String, как Object.
Он соответствует int впринципе. Для многих примитивных типов в Яве есть соответствующие классы.
------------------------
Существует метод equals;
пример
b1.equals(b2); // equals - ==
этот метод существует у каждого объекта- потому что этот метод находится в классе Objects- а там есть этот метод, а от класса Objects наследуются все классы в яве
пример
public class Bike{
int num;
public boolean equals(Bike b2)
return num=b2.getNum}
EQUALS всегда проверяется на Null, потом на два =, потом на нул все поля, потом сравнения между полями(поля разные бывают).Если обычные типы данных- примитивные(инты даблы булеаны), если два ОБЪЕКТА - использовать equals

String a1="aa"
String a2="aa"
a1==a2;
что вернется в таком случае? вернется FALSE- потому что это 2 РАЗНЫХ ОБЪЕКТА(в ячейках)
a1.equals(a2) - только в таком случае получим TRUE- потому что тут будет логическое сравнение внутри класса String // это еще раз подтверждает что сравнивают Объекты таким образом.нужно убедиться что первый объект не равен NULL- поэтому лучше сначала перед иквалсом писать if(a1!=null){ и далее иквалс}

http://study-java.ru/uroki-java/urok-11-sortirovka-massiva/ НУЖНАЯ ССЫЛКА ДЛЯ СОРТИРОВКИ ПУЗЫРЬКОМ