From machine code to almost human language, programming languages have come a long way.
According to their degree of abstraction, programming languages can be defined as:
This language abstraction is useful to us, programmers, but the machine does not understand it. Before it can be executed, our code must undergo a translation process.
// ASSEMBLY
mov ax, num1
mov bx, num2
cmp ax, bx
jne L1
mov x, 1
jmp L2
L1: mov x, 2
L2:
// JavaScript
if(num1 === num2) {
x = 1;
} else {
x = 2
}
Languages like Pascal, C, Go, Rust, Swift, among others, are what we call compiled languages.
Code written in these languages must first be parsed by a piece of software called the compiler, and then converted into machine code.
Languages like Ruby, JavaScript, PHP, Perl, among others, are what we call interpreted languages.
Code written in these languages must be parsed and translated into machine code by a piece of software called the interpreter.
↳ faster to run | ↳ more flexibility |
↳ errors caught earlier | ↳ platform independent |
COMPILED | INTERPRETED |
---|
Java is a cross-platform, portable language.
This means that a Java program can be developed on any machine, compiled into standard bytecode, and then executed in any device that is equipped with a Java Virtual Machine (JVM).
The Java programming language is the standard language used by the Java Platform. However, it is not its only language.
Other JVM compatible languages include:
HelloWorld.java
Java's syntax is largely influenced by C++ and C.
It's a statically typed language, and almost exclusively object oriented.
There are eight primitive types in Java.
Every non-primitive type is known as a reference type.
There are reference types built in the language, like Strings, but programmers can create their own.
The default value of a reference type is null.
Values of a reference type are called objects.
// ASSIGNMENT
int firstNumber = 20;
int secondNumber = 5;
// ADDITION
int additionResult = firstNumber + secondNumber; // 25
// SUBTRACTION
int subtractionResult = firstNumber - secondNumber; // 15
// MULTIPLICATION
int multiplicationResult = firstNumber * secondNumber; // 100
// DIVISION
int divisionResult = firstNumber / secondNumber; // 4
// REMAINDER
int remainder = 20 % 5; // 0
int result = 0;
// ADDITION
result += 5; // 5 || same as result = result + 5;
// SUBTRACTION
result -= 2; // 3
// MULTIPLICATION
result *= 10; // 30
// DIVISION
result /= 5; // 6
int johnsAge = 24;
int marysAge = 31;
int petersAge = 31;
// EQUAL TO
johnsAge == marysAge; // false
marysAge == petersAge; // true
// NOT EQUAL TO
johnsAge != marysAge; // true
marysAge != petersAge; // false
// GREATER THAN
johnsAge > marysAge; // false
marysAge > petersAge; // false
johnsAge >= marysAge; // false
marysAge >= petersAge; // true
// LESS THAN
johnsAge < marysAge; // true
marysAge < petersAge; // false
johnsAge <= marysAge; // true
marysAge <= petersAge; // true
int result = 0;
// ADDITION
result++; // 1 || same as result = result + 1;
// SUBTRACTION
result--; // 0
// INVERSION
boolean isMorning = true;
System.out.println(!isMorning); // prints false
int mikesAge = 16;
boolean fakeId = false;
// CONDITIONAL-AND
if(mikesAge > 21 && !fakeId){
System.out.println("Mike can get into the club.");
}
// CONDITIONAL-OR
if(mikesAge > 21 || fakeId){
System.out.println("Mike can get into the club.");
}
int mikesAge = 16;
int basePrice = 20;
// TERNARY OPERATOR TO ASSIGN VALUE
int bribingPrice = mikesAge >= 21 ? basePrice : basePrice * 2;
// TERNARY OPERATOR TO PRINT SOMETHING
System.out.println(mikesAge >= 21 ? "Please, come in!" : "Go away!");
// A TINY EXERCISE:
System.out.println(mikesAge++ >= 17 ? "Please, come in!" : "Go away!"); // What will be printed?
int mikesAge = 16;
int basePrice = 20;
// TERNARY OPERATOR TO ASSIGN VALUE
int bribingPrice = mikesAge >= 21 ? basePrice : basePrice * 2;
// TERNARY OPERATOR TO PRINT SOMETHING
System.out.println(mikesAge >= 21 ? "Please, come in!" : "Go away!");
A String is a sequence of characters.
In Java, specifically, strings aren't primitives; they are treated as objects.
// The following are all strings in Java:
"To be, or not to be a String, that is the question."
"98423"
"false"
"a"
" "
""
There are two ways of creating a String in Java:
// STRING LITERALS:
String message = "I came here to make one thing clear: I'm a literal legend.";
// USING THE CONSTRUCTOR METHOD:
String message = new String("I'm no Bob, though.");
But are these two ways of creating Strings interchangeable? Is the result the same? Let's see.
In Java, created objects are stored in a specific area of memory called the heap. The same goes for strings.
When a String literal is created, its storing process is slightly different.
Inside the heap region, there's an even more specific zone called the String pool.
What happens if we change the value of the songTitle variable?
Java Strings are immutable!
"Cry Baby" will either be reassigned or garbage collected.
String name = "Jim Morrison";
String artist = "Jim Morrison";
System.out.println(name == artist); // what's the result?
String name = "Jim Morrison";
String artist = new String("Jim Morrison");
System.out.println(name == artist); // what's the result?
String name = "Jim Morrison";
String artist = "David Bowie";
System.out.println(name == artist); // what's the result?
String name = new String("Jim Morrison");
String artist = new String("Jim Morrison");
System.out.println(name == artist); // what's the result?
Despite having the exact same sequence of characters, the Strings name and artist are different objects.
The == operator compares the memory addresses of two objects, not their content.
The equals() method, available in all String objects, compares the character sequence itself, instead of the objects' memory references.
String name = "Jim Morrison";
String artist = new String("Jim Morrison");
name == artist; // FALSE; compares references
name.equals(artist); // TRUE; compares the content of the two objects
String character = "Cookie Monster";
int length = character.length();
System.out.println(length); // prints 14
char c = character.charAt(1);
System.out.println(c); // prints 'o'
String result = character.concat("!");
System.out.println(result); // prints "Cookie Monster!" || same as using the '+' operator
boolean containsLetterP = character.contains("p");
System.out.println(containsLetterP); // prints false || contains() method takes on a sequence of characters; it's case sensitive
boolean endsWithR = character.endsWith("r");
boolean startsWithR = character.startsWith("r");
System.out.println(startsWithR); // prints false || startsWith() method takes on a String; it's case sensitive
System.out.println(endsWithR); // prints true || endsWith() method takes on a String; it's case sensitive
String monsterMessage = "Om nom nom nom.";
int index = monsterMessage.indexOf("a"); // -1 || indexOf() method takes on a String, and it's case sensitive; returns -1 if there aren't any matches
int secondIndex = monsterMessage.indexOf("o", 5); // 8
int lastIndexOf = monsterMessage.lastIndexOf("o"); // 12
String allCapsMessage = monsterMessage.toUpperCase(); // "OM NOM NOM NOM."
String noCapsMessage = monsterMessage.toLowerCase(); // "om nom nom nom."
String result = monsterMessage.replace("o", "a"); // "Om nam nam nam." || replace() method can take either a single character or a character sequence
String result2 = monsterMessage.replaceAll("\\s", ""); // "Omnomnomnom."
String monsterGift = "I'd give you a cookie but I ate it.";
String[] words = monsterGift.split(" "); // [I'd, give, you, a, cookie, but, I, ate, it.]
String[] moreWords = monsterGift.split(" ", 2); // [I'd, give you a cookie but I ate it.]
String substring = monsterGift.substring(23); // "but I ate it."
String anotherSubstring = monsterGift.substring(15, 21); // "cookie" || second index is exclusive
String cookieType = " chocolate chip ";
cookieType.trim(); // "chocolate chip"
A bunch of musicians are having a feast, and each of them is bringing a dish. The only rule is that the first and last letters of the dish must match the first and last letters of the musician's name.
class DishTester {
public static void main(String[] args){
testDish("Bob Dylan", "beef wellington"); // should print true
testDish("Mick Jagger", "mushroom soup"); // should print false
}
public static void testDish(String musicianName, String dish){
// write your code here
}
}
Each musician is given a password to get into the feast's venue. Every password is generated the same way: a computer program takes the musician's last name and replaces every 'a' with an '@', and every 'i' with an exclamation point.
class PasswordGenerator {
public static void main(String[] args){
generatePassword("Peter Gabriel"); // should print "G@br!el"
generatePassword("Brian Adams"); // should print "@d@ms"
}
public static void generatePassword(String musicianName){
// write your code here
}
}
Arrays are used to store multiple values in a single variable.
In Java, arrays are objects that must be declared with a specific type.
// CREATING AN ARRAY WITH PRE-DEFINED ELEMENTS
int[] numbers = {1, 34, 29, 18};
String[] names = {"Anthony", "John", "Dave", "Florence"};
// ELEMENTS MUST BE OF THE PRE-DEFINED TYPE
numbers[0] = "1"; // COMPILATION ERROR
int[] numbers = new int[4]; // [0,0,0,0]
String[] names = new String[2]; // [null, null]
// Java arrays have a fixed size that
// must be defined at the time of creation
names[2] = "Mark"; // RUNTIME ERROR
int[] numbers = new int[4];
// INSERT DATA INTO ARRAY
numbers[0] = 23;
// CHANGE DATA IN ARRAY
numbers[0] = 34;
// ACCESS ARRAY SIZE
numbers.length
int mariasAge = 16;
if(age > 21){
System.out.println("Please come in!");
} else {
System.out.println("Leave, or I'll call your mom.");
}
int mariasAge = 16;
if(age < 80){
System.out.println("Please come in, but beware of the loud noises.");
} else if(age < 50){
System.out.println("Please, come in!");
} else if(age < 21){
System.out.println("Leave, before I call your mom.");
}
// BEWARE OF THE ORDER
String weekday = "MONDAY";
switch(weekday){
case "SUNDAY":
System.out.println("Sunday, bloody Sunday.");
break;
case "MONDAY":
System.out.println("Monday, Monday, can't trust that day.");
break;
case "TUESDAY":
System.out.println("Give me your heart and I'll love you till Tuesday.");
break;
case "WEDNESDAY":
System.out.println("On Wednesday they're feelin' fine again.");
break;
case "THURSDAY":
System.out.println("And I was Thursday's child (oh, oh, oh, oh).");
break;
case "FRIDAY":
System.out.println("It's Friday, Friday, gotta get down on Friday.");
break;
case "SATURDAY":
System.out.println("Gonna keep on dancing to the rock and roll, on Saturday night.");
break;
}
int bullets = 20;
// WHILE LOOP
while (bullets > 0){
System.out.println("Pew pew pew.");
bullets--;
}
// DO-WHILE LOOP
do {
System.out.println("Pew pew pew.");
bullets--;
} while (bullets > 0);
String[] names = {"Elizabeth", "Archibald", "Victoria", "Charles", "Sarah"};
// FOR LOOP
for(int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
// ENHANCED FOR LOOP
for(String name : names) {
System.out.println(name);
}
String[] names = {"Elizabeth", "Archibald", "Victoria", "Charles", "Sarah"};
for(int i = 0; i < names.length; i++) {
if(names[i].startsWith("C")){
System.out.println("Found who I'm looking for! Hi, " + names[i] + "!");
break;
}
System.out.println("You're not who I'm looking for.");
}
String[] names = {"Elizabeth", "Archibald", "Victoria", "Charles", "Sarah"};
for(int i = 0; i < names.length; i++) {
if(names[i].endsWith("h")){
System.out.println("Hello, " + names[i] + "!");
continue;
}
System.out.println("You're not who I'm looking for.");
}
It's concert time!
Ten of the invited musicians will perform a concert, and each was given a number, from 1 to 10. That number will define the order in which the musicians will perform.
Madonna, however, wasn't invited to perform and isn't handling the rejection with grace. Once the musicians are all lined up, she takes a number out of the set. Figure out which number she took.
class StolenNumber {
public static void main(String args[]){
findStolenNumber(new int[]{1,2,3,5,6,7,8,9,10}); // should print 4
findStolenNumber(new int[]{1,2,3,4,5,6,7,8,10}); // should print 9
findStolenNumber(new int[]{1,2,3,4,5,6,7,8,9,10}); // should print "no number was stolen"
}
public static void findStolenNumber(int[] numbers){
// write your code here
}
}
A method is a collection of statements that are grouped together to perform an operation.
The code inside a method only executes when the method is called.
public void printNumberOne(){
System.out.println(1);
}
public void printNumberTwo(){
System.out.println(2);
}
printNumberOne();
printNumberTwo();
// WHAT IF WE COULD CREATE A METHOD THAT PRINTED ANY NUMER WE WANTED?
public void printNumber(int number){
System.out.println(number);
}
public void addNumbers(int number1, int number2){
System.out.println(number1 + number2);
}
printNumber(34); // 34
printNumber("one"); // COMPILATION ERROR
addNumbers(2, 10); // 12
public int addNumbers(int number1, int number2){
return number1 + number2;
}
int result = addNumbers(2, 10);
int result2 = addNumbers(22); // COMPILATION ERROR
String result3 = addNumbers(2, 8); // COMPILATION ERROR
System.out.println(addNumbers(1, 1)); // prints 2
// ABSOLUTE
int absoluteInt = Math.abs(-10); // returns 10
double absoluteDouble = Math.abs(2.22); // returns 2.22
// ROUNDING
double number = 10.3;
double roundedUp = Math.ceil(number); // 11.0
double roundedDown = Math.floor(number); // 10.0
int rounded = Math.round(number); // 10
// RANDOM
int min = 1;
int max = 10;
double random1 = Math.random(); // value between 0 and 1 (exclusive)
double random2 = Math.random() * max; // value between 0 and max (exclusive)
double random3 = Math.random() * (max + 1); // value between 0 and max (inclusive)
double random4 = Math.random() * (max - min + 1) + min; // value between min and max (inclusive)
int randomInt = (int) (Math.random() * (max - min + 1) + min);
// MAX
double maxDouble = Math.max(10.2, 11.3); // 10.2
int maxInt = Math.max(23, 12); // 12
// MIN
double minDouble = Math.min(1.23, 2); // 1.23
int minInt = Math.min(12, 50); // 12
int minInt = Math.min(12.2, 5); // COMPILATION ERROR
The party is coming to an end, and the last musicians are leaving the venue when the staff calls them to help clean up the place.
No one wants to do it, so a plan takes form: they will all line up, and a staff member will think of a random number between 10 and 15 to give each artist. If the musician's name has more letters than the picked number, that musician gets chosen to help. The others are free to go.
class MusiciansHell {
public static void main(String[] args){
String[] musicians = {"Steven Tyler", "Erykah Badu", "Mick Jagger", "Paul McCartney", "Brandon Flowers", "Alex Turner"};
String musician = pickMusician(musicians); // should return the musician's name, or "No one will stay to help."
}
public static String pickMusician(String[] musicians){
// write your code here
}
}