Podstawowe typy danych

Typy prymitywne, tablice, łańcuchy znaków oraz typ wyliczeniowy


dr inż. Aleksander Smywiński-Pohl

apohllo@o2.pl

http://apohllo.pl/dydaktyka/obiektowe

Typy prymitywne

  • boolean - wartości true i false
  • char - pojedyncze znaki z zestawu Unicode
  • byte - jednobajtowa liczba ze znakiem
  • short - dwubajtowa liczba ze znakiem
  • int - czterobajtowa liczba ze znakiem
  • long - ośmiobajtowa liczba ze znakiem
  • float - liczba zmiennopozycyjna, co najmniej 6 cyfr znaczących
  • double - liczba zmiennopozyzyjna, co najmniej 15 cyfr znaczących

Typ boolean

int invalidValue = 1;
if(invalidValue) {                                  
    System.out.println("Wycieraczki są włączone");
} else {
    System.out.println("Wycieraczki są wyłączone");
}
boolean wipersOn = true;
if(wipersOn) {
    System.out.println("Wycieraczki są włączone");
} else {
    System.out.println("Wycieraczki są wyłączone");
}

Typ char

import static java.lang.System.out;

char driverCategory = 'B'
char tick = '\u2713'
out.println(driverCategory);
out.println(tick);
out.println(Character.isLetter(driverCategory));
out.println(Character.isLetter(tick));

Typy całkowitoliczbowe: byte, short, int oraz long

int a = 10;
int b = 20;
long c = a + b;
short d = a + b;
short e = (short) (a + b);
if(Short.MAX_VALUE > a + b){
    e = (short) (a + b);
}
byte f = 127;
byte g = 127;
byte h = (byte) (f + g);

Typy zmiennopozycyjne float i double

import static java.lang.System.out;

int a = 0;
float b = 0.0;

if(a == b){
    out.println("Wartości są identyczne");
}
double EPSILON = 1e-5;
if(Math.abs(a - b) < EPSILON){
    out.println("Wartości są prawie identyczne");
}

Typy otokowe

  • Boolean
  • Byte
  • Short
  • Character
  • Integer
  • Long
  • Float
  • Double
Integer a = new Integer(10);
Integer b = new Integer(20);
Integer c = a + b;
out.println(c.toString());

int d = 30;
out.println(d.toString());

Zastosowanie typów otokowych

List<Integer> list = new LinkedList<Integer>();
list.add(new Integer(10));
list.add(new Integer(20));

out.println(list);

Autoboxing

list.add(30);
list.add(40);

out.println(list);

Porównywanie typów otokowych

Integer a = 200;
Integer b = 200;
if(a == b){ 
    out.println("Wartości są równe");
} else {
    out.println("Wartości nie są równe");
}
if(a.equals(b)){ 
    out.println("Wartości są równe");
} else {
    out.println("Wartości nie są równe");
}

Typ tablicowy

import static java.lang.System.out;

int[] speedVector = new int[3];
speedVector[0] = 10;
speedVector[2] = -3;

for(int i = 0; i < 4; i++){
    out.println("Składowa " + (i + 1) + " wektora wynosi: " + speedVector[i]);
}

Typ tablicowy - obiekty

class Speed {
    public int value;
    public String unit;

    public Speed(int value, String unit){
        this.value = value;
        this.unit = unit;
    }
}

Typ tablicowy - obiekty

import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(int i = 0; i < 3; i++){
    out.println("Składowa " + (i + 1) + " wektora wynosi: " + 
        speedVector[i].value + " " + speedVector[i].unit);
}

Zabezpieczenie przed wyjątkiem NullPointerException

import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(int i = 0; i < 3; i++){
    if(speedVector[i] == null) {
        out.println("Składowa " + (i + 1) + " wektora jest pusta");
    } else {
        out.println("Składowa " + (i + 1) + " wektora wynosi: " + 
            speedVector[i].value + " " + speedVector[i].unit);
    }
}

Alternatywna pętla for

import static java.lang.System.out;

Speed[] speedVector = new Speed[3];
speedVector[0] = new Speed(10, "km/h");
speedVector[1] = new Speed(-3, "km/h");

for(Speed element : speedVector){
    if(element == null) {
        out.println("Składowa wektora jest pusta");
    } else {
        out.println("Składowa wektora wynosi: " + 
            element.value + " " + element.unit);
    }
}

Porównywanie tablic

import static java.lang.System.out;

int[] speedVector1 = { 10, -3, 0 }
int[] speedVector2 = { 10, -3, 0 }

if(speedVector1 == speedVector2){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}
if(speedVector1.equals(speedVector2)){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}
if(Arrays.equals(speedVector1, speedVector2)){
    out.println("Wektory są równe");
} else {
    out.println("Wektory nie są równe");
}

Sortowanie i wypisywanie tablic

import static java.lang.System.out;

int[] vector = { 7, 15, 10, -3, 9, 12}
Arrays.sort(vector);
out.println(vector.toString());
out.println(Arrays.toString(vector));

Tablice wielowymiarowe

int[][] matrix1 = new int[10][10];
out.println(matrix1[0][0]);
int[][] matrix2 = new int[10][];
out.println(matrix2[0][0]);

for(int i = 0; i < 10; i++){
    matrix2[i] = new int[10];
}
out.println(matrix2[0][0]);

Porównywanie i wyświetlanie tablic wielowymiarowych

import static java.lang.System.out;

int[][] matrix1 = { {1, 2}, 
                    {3, 4} };
int[][] matrix2 = { {1, 2}, 
                    {3, 4} }

out.println(Arrays.toString(matrix1));
out.println(Arrays.deepToString(matrix1));
if(Arrays.equals(matrix1,matrix2)){
    out.println("Tablice są równe");
} else {
    out.println("Tablice **nie** są równe");
}
if(Arrays.deepEquals(matrix1,matrix2)){
    out.println("Tablice są równe");
} else {
    out.println("Tablice **nie** są równe");
}

Łańcuchy znaków

import static java.lang.System.out;

String unit1 = "km/h";
String unit2 = "km/h";
String letter = "h";
String unit3 = "km/"  + letter;

if(unit1 == unit2){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}
if(unit1 == unit3){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}
if(unit1.equals(unit3)){
    out.println("Jednostki są równe");
} else {
    out.println("Jednostki **nie** są równe");
}

Modyfikacja łańcuchów

import static java.lang.System.out;

String km = "km";
String divider = "/";
String hour = "h";

String unit1 = "";
String unit2 = unit1;
unit1 += km;
unit1 += divider;
unit1 += hour;
if(unit1 != unit2){
    out.println("Łańcuchy nie są równe");
}

StringBuilder

import static java.lang.System.out;

String km = "km";
String divider = "/";
String hour = "h";

StringBuilder builder1 = new StringBuilder();
StringBuilder builder2 = builder1;
builder1.append(km);
builder1.append(divider);
builder1.append(hour);
if(builder1 == builder2){
    out.println("Budowniczowie łańcuchów są równi");
}

builder1.toString();

Typ wyliczeniowy

import static java.lang.System.out;

enum Color {
    Red,
    Green,
    Blue
}

Color carColor = Color.Green;
out.println(carColor.name());
out.println(carColor.ordinal());
out.println(Arrays.toString(Color.values()));

Instrukcja selekcji i typ wyliczeniowy

import static java.lang.System.out;

Color carColor = Color.Green;

switch(carColor){
    case Red:
        out.println("Jesteś strażakiem?");
        break;
    case Green:
        out.println("Łatwo ukryć go w lesie");
        break;
    case Blue:
        out.println("Pracujesz w policji?");
        break;
}

Instrukcja selekcji i łańcuchy znaków

String color = "red";

switch(color){
    case "red":
        out.println("Jesteś strażakiem?");
        break;
    case "green":
        out.println("Łatwo ukryć go w lesie");
        break;
    case "blue":
        out.println("Pracujesz w policji?");
        break;
}

Porównywanie wartości typu wyliczeniowego

Color color1 = Color.Red;
Color color2 = Color.Red;

if(color1 == color2){
    out.println("Kolory są równe");
}

Typ logiczny w Rubim

if(nil)
  puts "Nil jest prawdą"
end

if(false)
  puts "Fałsz jest prawdą"
end
if(true)
  puts "Prawda jest prawdą"
end

if("false")
  puts "Łańcuch 'false' jest prawdą"
end

if(0)
  puts "Zero jest prawdą"
end
true.to_s

Porównwanie wartości

x = 100
y = 100

if(x == y)
  puts "Wartości liczbowe są sobie równe"
end
puts 100 ** 100
a = "Ala"
b = "Ala"
if(a == b)
  puts "Łańcuchy są sobie równe"
end
a = [1,2,3]
b = [1,2,3]

if(a == b)
  puts "Tablice są sobie równe"
end

Wartość pusta nil

nil.nil?
1.nil?
a = nil

if(a.nil?)
  puts "Niepoprawna wartość"
end

puts a.to_s

Pytania?