[ ] | ( ) | |||
++ | -- | ! | ~ | |
* | / | % | ||
+ | - | << | >> | >>> |
< | > | <= | >= | |
= = | != | |||
& | ||||
^ | ||||
| | ||||
&& | ||||
|| | ||||
?: | ||||
= | += | … |
Асоциативност на операциите
почти всички - отляво на дясно
= += ... от дясно на ляво
Пример:
Да се определи редът на изпълнение на оерациите:
z = p * r % q + w / x - y
==> z =((((p * r) % q) + (w / x)) - y)
6
1 2 4
3 5
z = a + b + k* (c = d = 0)
==> z = ((a + b) +( k* ((c = (d = 0)) )))
7 1 6 5
4 3 2
Типове:
Резултатът от операцията е от типа на опернадите. Ако те са от различен тип се извършва предварително изравняване на типа на операндите по начин да няма загуба на информация (стрелките на фигурата по-долу).
public class Oper {
public static void main(String arg[]){
int i1=4, i2 = 5;
double f1 =5.0;
f1= i1/i2 +i1/f1;
}
}
i1/i2 - без преобразуване на типа - резултат 0
i1/f1 - i1 се
преобразува в double - резултат 0.8
Явно преобразуване (caste).
public class Oper {
public static void
main(String arg[]){
int in;
long ln=123L;
double db = 34.5;
in = ln; //type mismatch
in = db; //type mismatch
in = (int)ln; //ok
in = (int)db; //ok
}
}
Почти всички операции могат да се използуват само с примитивните типове. Само операциите '=', '= =', и '!=' могат да се използват с всички обекти и класът "String" поддържа операциите '+' и '+='.
Операторът '+' се използва с обекти от тип "String" за конкатенация (свързване). Ако един израз започва с обект от тип "String"всички следващи операнди се преобразуват в "String" (в последните версии това преобразуване се извършва дори ако обектът от тип "String" не е първи операнд:
int x = 0, y = 1, z =
2;
String sString = "x,
y, z ";
System.out.println(sString
+ x + y + z); // x,y,z 012
System.out.println(sString
+ (x + y + z)); // x,y,z 3
оператор >>>
Примери:public class Operators { public static void main(String[]arg){ int in; // casting long ln=123L; double db = 34.5; //in = ln; //type mismatch //in = db; //type mismatch in = (int)ln; //ok in = (int)db; //ok /*****************************************************/ String s, s1="Pijo ", s2="loves ",s3= "apples "; //concatenation s= s1+s2; System.out.println(s); s+=s3; // s=s+s3 System.out.println(s); /*****************************************************/ int i1=4, i2 = 5; // division double f1 =5.0; System.out.println("1: "+i1/i2+"\t" +i1/f1); /*****************************************************/ int k, m=3,z=4,p; // assignment p = k =(m = 2) *(z = 4); System.out.println("2: "+k+"\t" + m+"\t" + z+"\t" + p+"\t"); //(p = k) = 2; //error: (p = k) is not variable /*****************************************************/ k=m=3; //increment System.out.println("3: "+ ++k +"\t"+ m++); System.out.println("4: "+ k +"\t" + m); //k= (m++)++; // error: m++ is not variable /*****************************************************/ System.out.println("11%4:\t"+11%4); // modulo System.out.println("23%6:\t"+23%6); System.out.println("-11%3:\t "+ -11%3); /*****************************************************/ System.out.println("25>11:"+(25>11)+ "\t17<=8: "+(17<=8)); //relations System.out.println("25==11:"+(25==11)+ "\t 25!=11: "+(25!=11)); /*****************************************************/ boolean b1=true,b2=true,b3=false,b4=false; // booleans System.out.println("true && true: "+(b1&&b2)+ "\t true && false: "+(b1&&b3)); System.out.println("true || false: "+(b1||b3)+ "\t false || false: "+(b3&&b4)); System.out.println("!true: "+!b1+"\t !false: "+!b3); /*****************************************************/ int a=4, b=9; // ternary System.out.println("ternary:"+ (a>b?a:b)+ "\t"+ (a<b?a:b)); } } |
Два типа управляващи
структури
– Управляващи структури за избор - позволяват
избор на кода за изпънение
– Управляващи структури за повторение -
позволяват повторението определен брой пъти на код за изпълнение
Управляващи структури за избор
{ } блок - последователно изпълняване на инструкциите. Могат да се включват един в друг.
Област на значение на променливите
public class Controle {
public static void main(String[] arg){
int n= 4;
{
int k = 5;
{
int m=3;
} // край на
валидността на m
}
// край на валидността на k
}
// край на валидността на n
}
if (логически израз) инструкция
Пример: int grade = 4; |
Пример: int grade = 4; |
или
if (логически
израз) { инструкция 1 инструкция 2 ... } |
Пример; int grade = 4;
if( grade > 3 ) {
System.out.println("Congratulations!");
System.out.println("You passed!");
}
if (логически израз) инструкция else инструкция
Пример: int grade = 4; |
Пример: int grade = 4; |
Пример: int grade = 4;
if( grade > 3 ) {
System.out.println("Congratulations!");
System.out.println("You
passed!");
}
else {
System.out.println("Sorry!");
System.out.println("You
failed!");
}
switch (дискретен израз) {
case
стойност 1:
последователност
от
инструкции 1 } switch (дискретен
израз) { |
Пример: int grade = 4; switch (grade) { case 0: case 1: case 2: System.out.println("You failed!"); break; case 3: System.out.println("with great difficulty!"); break; case 4: System.out.println("You passed!"); break; case 5: System.out.println("You are good");break; case 6: System.out.println("You are very good");break; default: System.out.println("This is not possible!"); } |
break;
Управляващи структури за повторение
[етикет:
]
while(логически
израз)
инструкция;
Внимание - опасност от безкраен цикъл
public class Controle {break; break етикет; |
Ред и линия за
първо срещане на зададена стойност public class Brk { public static void main(String arg[]) { int[][] numbers = { { 1, 2, 3 }, { 6, 5, 12}, { 6, 8, 18 } }; int searchNum = 6,i=0,j=0; boolean foundNum = false; outLoop: for (i=0; i < numbers.length; i++) { for (j=0; j < numbers[i].length; j++) { if (searchNum == numbers[i][j]) { foundNum = true; break outLoop; } } } if (foundNum) System.out.println(searchNum + " found on ["+i+","+j+"]"); else System.out.println(searchNum + " not found!"); } } |
continue; continue етикет; |
Линии
в които има зададена стойност public class Cntn { public static void main(String arg[]) { int[][] numbers = { { 1, 2, 3 }, { 6, 5, 12}, { 6, 8, 18 } }; int searchNum = 6,i=0,j=0; searchLabel: for (i=0; i < numbers.length; i++) { for (j=0; j < numbers[i].length; j++) { if (searchNum == numbers[i][j]) { System.out.println(searchNum + " found on line:"+i); continue searchLabel; } } } } } |