// Да програмираш значи да описваш алгоритъм с формален език за програмиране. Алгоритми + данни = програми. // HelloWorld.java // javac HelloWorld.java // java HelloWorld // javac -d . HelloWorldPackage.java // java com.coolcsn.HelloWorldPackage // "C:\Program Files (x86)\Java\jdk1.8.0_192\bin\javac" HelloWorld.java // "C:\Program Files (x86)\Java\jdk1.8.0_192\bin\java" HelloWorld // sout + tab - prints System.out.println; Alt + Enter; Enter brak point, Start Debug, look down on the left step into // Ctrl + / - comment out, uncomment // ⌥ ⌘ / macOS or Ctrl + Shift + / - Block comments. Comment Uncomment // Refactor This using ⌃T (MacOS) or Shift+Ctrl+Alt+T (Windows) // Shift + F6 rename // Shift + F9 - Debug // Shoft + F10 - Rub // You can use ⌘N (macOS), or Alt+Insert (Windows/Linux) for the Generate menu and then select Constructor, Getter, Setter or Getter and Setter // File > Settings (или Ctrl + Alt + S) // IntelyJ shortcuts: sout, fori + /t // HSift + F9 - debug, F8 - step //TIP To Run code, press Shift+F10 or // click the Alt + Enter icon in the gutter. // public class Main { // public static void main(String[] args) { //TIP Press with your caret at the highlighted text // to see how IntelliJ IDEA suggests fixing it. // System.out.printf("Hello and welcome!"); // for (int i = 1; i <= 5; i++) { //TIP Press Shift + F9 to start debugging your code. We have set one breakpoint // for you, but you can always add more by pressing . // System.out.println("i = " + i); // } // } // } package com.coolcsn; import java.util.*; public class HelloWorld { public static final String ANSI_RED_BACKGROUND = "\u001B[41m"; public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_RED = "\u001B[31m"; public static final String ANSI_GREEN_BACKGROUND = "\u001B[42m"; public static void main(String[] args) throws java.io.IOException { // 1. Hello World System.out.println("Hello World!"); // 2. Primitive types. Strictly typed, static language // 2.1. Integer. Default 0 byte myByte = -128; // 8 bits signed -128 to 127 short myShort = 23456; // 16 bits signed -2^15 to 2^15 -1 int myInt = 432423423; // 32 bits signed -2^31 to 2^31 -1 long myLong = 4321432423L; // 64 bits signed -2^63 to 2^63 -1 long maxLong = Long.MAX_VALUE; System.out.println(maxLong); // Literal myShort = 034; // octal radix System.out.println(myShort); // Hex Literal myInt = 0xffab; System.out.println(myInt); // 2.2. Real float myFloat = 2.3454324234324F; // 32 bits signed 7 symbols double myDouble = 2.3454324234324D; // 64 bits signed 14 symbols System.out.println(myFloat); System.out.println(myDouble); // 1.3 * 10^3 myDouble = 1.2e-1; System.out.println(myDouble); // 2.3. Char char myChar = 'S'; System.out.println((int)myChar); System.out.println((char)84); myChar = '\u0041'; // A myChar = '\u004E'; myChar = '\''; System.out.println(myChar); System.out.println("\'Stoyancho\\Sharo\' \t 45 & | "); // 2.4. String String myString = "Stoyan"; // null // 2.5. Bool boolean myBool = true; // // 2.6. Object Object myObject = 5; Object obj = 5; // obj = "Stoyancho"; System.out.println(obj); // Object n = 4; // System.out.println(obj + n); System.out.println("Hello World IDE"); System.out.println( 2 + 2); // 3. Operators // 3.1 Arithmetics int n = 25; int m = 32; System.out.println(m + n); //57 System.out.println(m - n); // 7 System.out.println(m * n); // 800 System.out.println(m / n); // 1 System.out.println((double)m / n); // 1.28 System.out.println(m % n); // 7 // System.out.println(m++ + n); // 57 System.out.println(++m + n); // 58 // System.out.println(m-- + n); // 58 System.out.println(--m + n); // 57 // 3.2. Comparison System.out.println(m > n); // true System.out.println(m < n); // false System.out.println(m <= n); // false System.out.println(m >= n); // true System.out.println(m != n); // true System.out.println(m == n); // false // 3.3. Logical boolean x = true; boolean y = false; System.out.println(x && y); // false // | x | y | && | || | !X | X^Y | // | true | true | true | true | false | false | // | true | false | false | true | false | true | // | false | true | false | true | true | true | // | false | false | false | flase| true | flase | System.out.println(x || y); // true System.out.println(!x); // fasle System.out.println(x ^ y); // true byte m1 = 3; // byte n1 = 2; System.out.println(m1 & n1); // 2 System.out.println(m1 | n1); // 3 System.out.println(~n1); // -1 Операторът ~ в Java е побитов оператор за отрицание (bitwise NOT) int n1 = 0; System.out.println(~n1); // -1 00000000 00000000 00000000 00000000 (това е 0) ~n1 обръща всеки бит: 11111111 11111111 11111111 11111111 (в Java това е -1 в 2's complement) System.out.println(n1 << 1); // 4 System.out.println(n1 >> 1); // 1 System.out.println(n1 >>> 1); // 1 // 3.4. Asignment m1 = 4; m1 += 3; // m1 = m1 + 3; int t = 4; t += 5; // t = t + 5; t *= 2; // t = t * 2; // =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, >>>= System.out.println(myString + myByte); System.out.println("Bojidare " + "Dineva " + 1); System.out.println((n1 > m1)? "Stoyan" : "Bojidara" ); // Oreder of operations change with () System.out.println(((n1 + m1) * (n1 - m1++)) + --m1 / ( 5 + 2)); System.out.println(obj.toString()); // 4. Console // %[argument_index$][flags][width][.precision]conversion // argument_index - целочислен тип показващ позицията на аргумента от "аргументния списък". // Първият аргумент се индикира с "1$", втория с "2$" и т.н. // flags - поредица от символи които модифицират изходния формат. // (Примерни ефекти са, показването на числото да бъде винаги със знак, слагането // на скоби на отрицателните числа и т.н.) - Резултатът ще бъде ляво ориентиран; // + Резултатът винаги ще включва знак (+, -); 0 Резултатът ще се отмести с нули; // ( Резултатът ще затвори в скоби отрицателните числа // width - неотрицателен целочислен тип показващ минималния брой символи, които трябва да се отпечатат. // precision - неотрицателен целочислен тип ограничаващ броя на показваните символи. // Този атрибут си променя поведението според conversion спецификатора. В случай на float определя броя цифри след запетаята. // b, o, x, c, s, S, f, e, h, n System.out.print("Enter your name: "); System.out.print("Stoyan \n"); String str = "Teodora"; String str1 = "Jivko"; System.out.printf("My name is %2$S and my name is %1$s . And I am a student! \n", str, str1); System.out.printf("%s \n", myInt); System.out.printf("%12d \n", myInt); System.out.printf("%12x \n", myInt); System.out.printf("%12o \n", myInt); System.out.printf("%+12.4f \n", -myFloat); // java.util.Date date = new java.util.Date(); Date date = new Date(); System.out.printf("%tY \n", date); System.out.printf("%tm \n", date); System.out.printf("%tB \n", date); System.out.printf("%tA \n", date); // System.out.printf("$tY, $tM \n", date); // Date myDate = new Date(2014, 02, 11); // deprecated Date myDate1 = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime(); java.util.Locale.setDefault(new java.util.Locale("bg", "BG")); System.out.printf("%tA \n", date); System.out.printf("Денят, в който бяхме съсипани: %1$tA %1$tH:%1$tM %1$tB-%1$tY.\n", new java.util.Date()); // 4.2. System.in // Only one character // System.out.print("Please enter your name: "); // int ch = System.in.read(); // System.out.println("The first letter of your name has ASCII code: " + ch); // 83 System.out.println((char)ch); /* Uncomment to see System.in // Old way of reading int ch; System.out.print("Please enter your name: "); while ((ch = System.in.read()) != '\n') { System.out.print((char) ch); } // !!!!!!!!!!! Use this Scanner !!!!!!!!!!!!!!!!!!!! Scanner input = new java.util.Scanner(System.in); // String System.out.print("Please enter your name: "); String firstName = input.nextLine(); // int System.out.print("Please enter your Age: "); int age = input.nextInt(); // Double System.out.print("Please enter your Balance: "); double balance = input.nextDouble(); input.close(); // Non formatted output System.out.print("Your favorite number is " + (age * balance) + "\n"); // System.out.printf("Your favorite number is %f", (age * balance)); System.out.println(ANSI_GREEN_BACKGROUND + ANSI_RED + "This text has a green background and red text!" + ANSI_RESET ); // + "\u001B[41m" */ // 5. Conditional logic. Условни конструкции // 5.1. if (n < m) { System.out.print("n < m"); } // 5.2. if (n > m ){ System.out.println("n > m"); } else { System.out.println("n < m"); } // 5.3. int testscore = 7; char grade; if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade = 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60) { grade = 'D'; } else { grade = 'F'; } // switch switch (m) { case 3: case 4 : System.out.println("m = 4 || m = 3"); break; case 5 : System.out.println("m = 5"); break; default: System.out.println("Deafult I couldn't guess!"); break; } // 6. Loops Цикли // 6.1. While int i = 0; while (i < n){ System.out.println(i); i++; } // 6.2. Scanner input = new java.util.Scanner(System.in); int age = 0; do { System.out.print("Please, enter your age (0 to 120): "); age = input.nextInt(); } while( age < 0 || age >= 120); // 5.3. for for ( i = 0; i < 10; i++) { System.out.print(i); } // continue System.out.println("------- odd ---------"); for ( i = 0; i < 10; i++) { if (i % 2 == 0) continue; System.out.println(i); } // break int prime = 46; for ( i = 2; i < prime; i++) { if (prime % i == 0 ) { System.out.println("The number is NOT prime"); break; } // System.out.println(i); } System.out.println(); // 5.4. Foreach. Douglas Addams int[] myArray = {23, 42, 324, 65, 76}; for (int j : myArray) { System.out.println(j); } // 7. Arrays. Нареда/индексирана последователност от еднотипни елементи // 7.1. Single dimension int[] myIntArray = new int[5]; myIntArray[0] = 0; myIntArray[3] = 3; for (i = 0; i < myIntArray.length; i++){ System.out.printf("myIntArray[%1$d] = %2$d \n", i, myIntArray[i]); } String[] students = {"Iliya", "Jivko", "Nasko", "Teodora"}; // 7.2. Multi dimension int[][] twoDimentionalArray; int[][][] threeDimentionalArray; int[][] matrix = { {1, 2, 3, 4}, // row 0 values {5, 6, 7, 8}, // row 1 values }; // The matrix size is 2 x 4 (2 rows, 4 cols) for (int row = 0; row < matrix.length; row++) { for (int col = 0; col < matrix[0].length; col++) { System.out.printf("matrix[%1$d][%2$d] = %3$d \n", row, col, matrix[row][col]); } System.out.println(); } int[][] matrixDefined = new int[2][3]; String[] myStringArray = new String[5]; for (i = 0; i < myStringArray.length; i++){ System.out.println(myStringArray[i]); } boolean[] myBoolArray = new boolean[5]; for (i = 0; i < myBoolArray.length; i++){ System.out.println(myBoolArray[i]); } // 8. Numbering Systems // 8.1. Pozicionna Nepozicionna broyni systemi // VI // 44 // IV VI X XI XII // 10 01 // base radix основа // 0-9 основате се определя от броя на цифрите // 8.2. Opredelqne stoynostta/tegloto na chisloto // 234 // 2*10^2 + 3*10^1 + 4*10^0 = 2*100 + 3*10 + 4*1 = 200 + 30 + 4 = 234 // 44(10) // 4*10^1 + 4*10^0 = 4*10 + 4*1 = 44 // 44(8) // 4*8^1 + 4*8^0 = 32 + 4 = 36 // 44(16) // 4*16^1 + ... // 8.3. Preobrazuwane ot edna w druga broyni sistemi // 8.3.1. desetichna kxm dwoichna // from binary to decimal // 10101010 // 1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 128 + 32 + 8 + 2 = 170 // 23(10) => // 23 : 2 = 11 | 1 // 11 : 2 = 5 | 1 // 5 : 2 = 2 | 1 // 2 : 2 = 1 | 0 // 1 // 10111(2) = 23(10) // 1*2^4 + 1 // from decimal to binary // 170 / 2 = 85 0 // 85 / 2 = 42 1 // 42 / 2 = 21 0 // 21 / 2 = 10 1 // 10 / 2 = 5 0 // 5 / 2 = 2 1 // 2 / 2 = 1 0 // 1 // 10101010 // 8.3.2. dwoichna w shestnadeseticha i osmichna 8421 // 0011 1010 1010 1111 0101 0101 // 3 A A F 5 5 // 001 110 101 010 111 101 010 101 // 1 6 5 2 7 5 2 5 // 8.3.3. floating point // 23.45 = 10111.0101001 => 1.01110101001 4 // 23 : 2 = 11 | 1 // 11 : 2 = 5 | 1 // 5 : 2 = 2 | 1 // 2 : 2 = 1 | 0 1 // .45 * 2 = 0.90 | 0 // 0.9 * 2 = 0.8 | 1 /* VI 44(10) 4*10^1 + 4*10^0 = 4*10 + 4*1 = 44 44(8) 4*8^1 + 4*8^0 = 32 + 4 = 36 44(16) 4*16^1 + 4*16^0 = 64 + 4 = 68 10 : 2 = 5 | 0 5 : 2 = 2 | 1 2 : 2 = 1 |0 | 1 1010(2) 1*2^3 + 0*2^2 + 1 *2^1 + 0*2^0 = 8 + 0 + 2 + 0 = 10 10 : 8 = 1 | 2 | 1 12(8) 1*8^1 + 2*8^0 = 8 + 2 = 10 241 : 8 = 30 | 1 30 : 8 = 3 | 6 3 361(8) = 241(10) 0010 1010 1010 1011 1001 0101 0101 0101 0101(2) 2 A A B 9 5 5 5 5 44(10) (10^2 -1) - 44 = 99 - 44 = 55 2345 (10^4 - 1) - 2345 = 9999 - 2345 = 7654- obraten (10^4) - 2345 = 7655 - dopxlnitelen 9999999999999999999999 - 6547654123675476452376 ---------------------------- 345.... 7 - 4 = 3 7 + 6 = 1 | 3 4 - 7 = -3 4 + 3 = 7 => -3 11111111111111111 - 10101010101011111 --------------------- 01010101010100000 Floating point 23.45 => 10111.0111 => 1.01110111 * 2^4 23 : 2 = 11 | 1 11 : 2 = 5 | 1 5 : 2 = 2 | 1 2: 2 = 1 | 0 1 0.45 * 2 = 0.9 |0 0.9 * 2 = 0.8 | 1 0.8 * 2 = 0.6 | 1 0.6 * 2 = 0.2 | 1 345.67 => 3.4567 * 10^2 4567.435 => 4.567435 * 10^3 */ //8.4. Praw obraten dopxlnitelen kod //8.4.1. desetichna broyna sistema //3 + 4 = 7 // // 7 - 3 = 4 // // // 34 // //obraten kod => (10^2 - 1) - 34 = 99 - 34 = 65 // 34 //dopxlnitelen (10^2 ) - 34 = 66 = 65 + 1 // // // 99 // - // 34 // ---------------- // 65 // // 9999999999999999 // - // 4343742364523476 // ----------------------- // 565... // // 999 // - // 456 // --------- // 543 - obraten => dopxlnitelen 544 // // 7 - 3 = 4 // // 7 + 7 = 1 | 4 // // 3 - 7 = -4 // // 3 + 3 = 6 => -4 // // 8.4.2. dwoichna broyna sistema //1111111111111 // - // 1010101111111 // ----------------- // 0101010000000 => 0101010000001 // 9. Methods - look down for method definitions greet(); // greet("Stoyan"); int[] ages = new int[3]; // inputArray(ages); /* Scanner input1 = new java.util.Scanner(System.in); for (i = 0; i < ages.length; i++) { System.out.printf("Please enter the value of element : %d", i); ages[i] = input.nextInt(); } */ int[] fNumbers = new int[4]; // inputArray(fNumbers); /* Scanner fNUmbers = new java.util.Scanner(System.in); for (i = 0; i < fNumbers.length; i++) { System.out.printf("Please enter the value of element : %d", i); fNumbers[i] = input.nextInt(); } */ /* for (i = 0; i < 10; i++) { System.out.println(i); } for (i = 20; i <=30; i++) { System.out.println(i); } */ printInterval(0, 10); printInterval(20, 30); System.out.println(calculateInterest(35.0)); printMenu(); // 9.1. Java doesn't have default values for the formal parameters. Use overloading instead // Java does not support default arguments in the same way that languages like C++ or Python do. However, you can achieve // Use method overloading instead: // void greet(String name) { // System.out.println("Hello, " + name); //} // void greet() { // greet("World"); // Default value // } // use the overloaded methods like this: // greet("Stoyan"); // Output: Hello, Stoyan // greet(); // Output: Hello, World // 9.2. Variable number of parameters welcomePerson("Stoyan", "Ivan", "Petko"); // 10. Recursion // 0! = 1; // n! = (n-1)!*n // 3! = 1*2*3 = 6 int mul = 1; for (i = 1; i <= 4; i++) { mul *= i; } System.out.println("Factorial = " + mul); System.out.println(calculateFactorIterations(4)); System.out.println(calculateFactorialRecursion(4)); // 11. Data Structures //11.1 slow on add and remove fast on access indexes/elements java.util.ArrayList myArrayList = new java.util.ArrayList(); myArrayList.add(10); myArrayList.get(0); System.out.println(myArrayList.get(0)); // 11.2. fast on add and remove slow on access indexes java.util.LinkedList myLinkedList = new java.util.LinkedList(); myLinkedList.add(5); myLinkedList.get(0); // 11.3. String text = "Stoyan"; Map words = new TreeMap(); Scanner textScanner = new Scanner(text); while (textScanner.hasNext()) { String word = textScanner.next(); Integer count = words.get(word); if (count == null) { count = 0; } words.put(word, count + 1); } for (Map.Entry wordEntry : words.entrySet()) { System.out.printf( "word '%s' is seen %d times in the text%n", wordEntry.getKey(), wordEntry.getValue()); } } // 10. Recursion public static int calculateFactorialRecursion(int number) { if (number == 0) return 1; return calculateFactorialRecursion(number -1) * number; } public static int calculateFactorIterations(int number) { int mul = 1; for (int i = 1; i <= number; i++) { mul *= i; } return mul; } static void greet(String name){ // static void greet() System.out.println("Hello " + name); } public static void inputArray(int[] myArray) { Scanner input = new java.util.Scanner(System.in); for (int i = 0; i < myArray.length; i++) { System.out.printf("Please enter the value of element : %d : ", i); myArray[i] = input.nextInt(); } } public static void printInterval(int from, int to){ for (int i = from; i <=to; i++) { System.out.println(i); } } public static double calculateInterest(double amount) { double interest = (1/4.0) * amount; return interest; } public static double calculateCompoundInterest(double amount, double interest, int period) { double totalAmount = amount * Math.pow((1 + interest/100), period); return totalAmount; } public static void printMenu() { System.out.println("File"); System.out.println("Edit"); } public static boolean isPrime(int prime) { for (int i = 2; i < prime; i++) { if (prime % i == 0 ) { return false; // System.out.println("The number is NOT prime"); // break; } } return true; } public static int inputNumber(int min, int max) { // String question, String question, int age = 0; Scanner input = new java.util.Scanner(System.in); do { // System.out.print("Please, enter a number between (5 to 25): "); System.out.printf("Please, enter a number between (%1$s to %2$s): ", min, max ); age = input.nextInt(); } while( age < min || age >= max); return age; } public static void welcomePerson(String ... people) { for (String person : people) { System.out.println("Welcome " + person); } } } // OOP // 1. История 1967 Алан Кай // 2. Класове и обекти // 3. Елементи на класа // 4. Статични елементи на класа // 5. Inheritance - Вьзможността да се преизползват дефинираните елементите на друг клас // 6. Abstraction - Вьзможността обект от даден клас да се третира като обект от родителски клас или интерфейс // 7. Encapsulation - Вьзможността да се скриват/енкапсулират вътрешните елементи на обектите от даден клас и да се излагат само важните за потребиеля. Обикновено това са методите от интерфейсите // 8. Polymorphism - Вьзможността обектите да запазват специфичната си функционалност (методи) и да се проявяват полиморфно, въпреки прилагането на абстракция.