一、语法结构
1、if
用于分支情况:如果。。。就。。。否则就。。。
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
2、for
用于循环处理:如从100内的偶数相加:从2开始,到100结束,控制变量每次增加2
for(初始化; 布尔表达式; 更新) {
//代码语句
}
3、foreach
只读型for循环,用于 遍历
for(声明语句 : 表达式)
{
//代码句子
}
4、while
当条件成立时,一直执行循环体,直到不满足条件
do-while要注意while表达式后面有;
while( 布尔表达式 ) {
//循环内容
}
先执行一次,再判断条件是否成立
do {
//代码语句
}while(布尔表达式);
二、实践
1、if-else
下面为加深理解比较两个string是否相等的栗子
public class temp {
public static void main (String[] args){
String string=new String();
string="Hello C!";
String string1="Hello C!";
String string2=new String("Hello C!");
if (string==string1) {
System.out.println("两个String用==判断相同");//程序执行了该语句,因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以string和string1指向的是同一个对象;
}
else System.out.println("两个String用==判断不同");
if (string1==string2) {
System.out.println("两个String用==判断相同");
}
else System.out.println("两个String用==判断不同");//程序执行了这句,因为string1和string2指向的对象是不同的
if (string1.equals(string2)) {
System.out.println("两个String用equals判断相同");
}
else System.out.println("两个String用equals判断不同");
}
}
/*
输出:
两个String用==判断相同
两个String用==判断不同
两个String用equals判断相同
*/
2、for循环
之前做面试题,有一个题是说输出一个蛇形数组,如下:
1 2 3
8 9 4
7 6 5
当时没有做出来,其实静下心来仔细分析,也不难:主要是要注意下标。下面是写的一个小方法
public int[][] SnakeMatrix(int [][] s) {
int count=1;
int n=s.length;
for(int i=0;i<n/2+1;i++){
//上
for(int j=i;j<n-i;j++){
s[i][j]=count;
count++;
}
//右
for(int j=i+1;j<n-i;j++){
s[j][n-i-1]=count;
count++;
}
//下
for(int j=n-i-2;j>=i;j--){
s[n-i-1][j]=count;
count++;
}
//左
for(int j=n-i-2;j>i;j--){
s[j][i]=count;
count++;
}
}
return s;
}
3、foreach
//ArrayList的栗子
public static void main (String[] args){
ArrayList<String> c =new ArrayList<String>();
c.add("张三");
c.add("李四");
c.add("王五");
for(String i:c){
System.out.println(i);
}
//不过网上说这样效率不高,因为每次i都是创建一个对象,再用get方法得到值。
//String 数组的栗子
public static void main (String[] args){
String [] te = new String[5];
te[0]="test0";
te[2]="test2";
te[4]="test4";
for(String i :te){
System.out.println(i);
}
}
/*输出
test0
null
test2
null
test4
*/
//初始化后,如果没有赋值就输出,会输出null;
//试了int的数组,没赋值的位置输出0;
4、while
下面是跟着老师视频写的一个开根号的方法
private static double Sqrt(double i) {
// TODO Auto-generated method stub
double x=1.0; //根
do{
x=(x+i/x)/2;
}while(Math.abs(x*x-i)>1e-6);
//直到根的平方无线接近于i,就代表x近似于根。
//如果不接近,就循环回去,再类似二分法(取根和i/根的中间)
return x;
}