数组


               在我们的main方法里,public static void main(String[] args)里,有一个参数,String[] args,我们知道String是一个字符串类,那这个中括号[]表示什么?这表示一个数组,这个数组是一个String类型的数组,我们从下面的例子来看


public class OfferServer{
	public static void main(String[] args){
		if(args!=null){
			for(int i=0;i<args.length;i++){
				System.out.println(args[i]);
			}
		}
	}
}



java rsa 原理 java中的rs是什么意思_数组


            在这个例子中,我们在执行java OfferServer命令时再后面加上了两个参数,Helloworld和nihao,然后再代码中把它打印出来了。


            数组,顾名思义,就是一串数的组合,当然在Java中,我们可以是其他对象的组合,不仅仅限于数值本身了。



            数组的声明很简单


数组的类型[]   标识符;


            比如我们声明一个字符串数组 String[] strs;

            一个int类型的数组 int[] scores;

            一个double类型的数组 double[]  weights;

            一个SportStar类型的数组SportStar[] stars;

            创建数组,我们也使用new关键字

new  数组的类型[数组的长度];

            比如:String[] strs = new String[5];创建一个长度为5的String数组

                       int[] scores = new int[6];  创建一个长度为6的int类型数组

                       double[] weights = new double[3];

                        SportStar[] stars = new SportStar[5];

            我们创建了数组后,系统默认对其做了初始化,按照各种基本类型的默认初始化值,以及引用类型的默认值null进行了初始化。

        

public class OfferServer{
	
	public static void main(String[] args){
		int[] i = new int[6];
		System.out.println(i[0]);
		SportStar[] stars = new SportStar[5];
		System.out.println(stars[0]);
	}

}

java rsa 原理 java中的rs是什么意思_数组_02

        我们还可以使用以下方式来创建数组

数组的类型[] 标识符 = {类型1,类型2,...类型N};

        例如: String[] strs = {“abc”,“hello”,“good”,“pass”};

                    int[] score = {59,73,66,85,101};

                    double[] weight = {45.0,53.6,75.3}

                    SportStar[] stars = {new SportStar(),new SportStar("张继科"),null};

        这样定义数组,在创建数组数确定了数组的长度为后面的元素个数,也设置了数组中每个元素的值

        数组的引用

标识符[下标]的方式访问,下标即元素的位置,比如我们要访问第二个元素

          

String[] strs = {"abc","hello","good","pass"};

            strs[1] = "helloworld";

            System.out.println(strs[1]);

        注意:数组的下标是从0开始的,也就是说我们要访问它的第一个元素,是使用strs[0]而不是strs[1],我们这个strs数组长度为4,如果要访问它的最后一位,是用strs[3]来访问,如果使用strs[4]来访问,会由于超过数组长度而抛出数组越界异常ArrayIndexOutOfBoundsException。

           另外,数组的长度可以使用length来得知,比如这个strs.length为4,我们看下面的例子

public class OfferServer{	
	public static void main(String[] args){
		String[] strs = {"abc","hello","good","pass"};
		System.out.println(strs.length);
		for(int i=0;i<strs.length;i++){
			System.out.println(strs[i]);
		}	
	}
}

java rsa 原理 java中的rs是什么意思_字符串_03

            在例子中,我们使用了数组长度作为限制条件,通过一个for循环把数组中的元素全部输出了。


            foreach循环


        在之前介绍循环的时,我们知道有for循环、while循环和do...while循环,在jdk1.5之后,JAVA引入了一个增强型for循环,我们称之为foreach循环,其语法为:


for(声明语句:表达式){


            循环执行的语句


        }

        例如上面的例子中,我们依次输出了数组中的所有元素,通过foreach我们可以这样写

        

public class OfferServer{	
	public static void main(String[] args){
		String[] strs = {"abc","hello","good","pass"};
		System.out.println(strs.length);
		for(String str : strs){
			System.out.println(str);
		}	
	}
}

        我们声明了一个标识符str,用于从数组strs获取元素输出。在foreach中,表达式可以是数组,也可以是返回数组的方法,但声明语句必须是和表达式相同的数据类型.

public class OfferServer{

	
	public String[] getArray(){
		String[] strs =  {"abc","hello","good","pass"};
		return strs;
	}
		
	public static void main(String[] args){
		OfferServer server = new OfferServer();
		for(String str : server .getArray()){
			System.out.println(str);
		}	
	}
}

        除了数组,我们还可以对集合使用foreach循环,在后面我们讲到集合以后会进行举例.

        多维数组

        多维数组,可以理解为数组的数组。比如二维数组,就一个每个元素都是一维数组的一维数组。听起来有些绕,比如我们定义一个二位数组,String[][] stars = new String[2][3],那么它实际上可以看成一个两行三列的数组,我们的前下标表示行数,后下标表示列数,比如

       

行数\列数        

1

2

3

1

姚明    stars[0][0]

林丹  stars[0][1]

马龙  stars[0][2]

2

霍建华 star[1][0]   

黄子华  stars[1][1]

刘德华 stars[1][2]

    我们通过不同维度的下标组合来访问数组中的元素。如上面的stars[1][2]。

    在创建二维数组时,我们甚至可以创建不规则的二维数组,比如

    String[][] stars = new String[2][];

    stars[0] = new String[3];

    stars[1] = new String[5];

    这样我们就创建了一个不规则的二维数组。

    考虑一下,怎么用 * 输出一个正方形?

public class OfferServer{	
	public static void main(String[] args){
		String[][] stars  = new String[5][5];
		for(int i=0;i<stars.length;i++){
			if(i==0||i==(stars.length-1)){
				for(int j=0;j<stars[i].length;j++){
					stars[i][j] = "*";
				}
			}else{
				for(int j=0;j<stars[i].length;j++){
					if(j==0||j==(stars[i].length-1)){
						stars[i][j] = "*";
					}else{
						stars[i][j] = " ";
					}
				}
			}
	
		}


		for(int i=0;i<stars.length;i++){
			for(int j=0;j<stars[i].length;j++){
				System.out.print(stars[i][j]);
			}
			System.out.println();
		}
	}
}

java rsa 原理 java中的rs是什么意思_字符串_04

        首先我肯定不是要你直接用System.out.print("*****")这样的方式来输出,其次,由于行间距和列间距的问题,我们输出的这个看起来是个长方形了,不过从形状上我们还是可以知道这是一个5X5的正方形。那么怎么输出一个菱形呢?

          简单的人机交互


           截止到目前为止,我们和系统一直是没有互动的,我们写好程序,让系统来执行,它就输出一些我们期望的结果。那么怎么和系统进行简单的人机交互呢?我们需要使用到一个java类,Scanner类。创建Scanner对象的基本语法是:


Scanner  scan = new Scanner(System.in);


          Scanner类的实例提供了一些获取键盘输入的方法


         next()          用于获取从键盘输入的字符串


         hasNext()    用于判断是否还有输入的数据


         nextLine()   用于获取从键盘输入的字符串


         hasNextLine()  用于判断是否还有输入的数据

         nextInt()    用于获取从键盘输入的整数

         hasNextInt() 用于判断是否还有要输入的整数

         nextDouble() 用于获取从键盘输入的double型数

        hasNextDouble() 用于判断是否还有要输入的double型数

        通常,我们只需要获取字符串、int和double就够用了。

import java.util.Scanner;

public class OfferServer{	
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		while(scan.hasNext()){
		String s = scan.next();
		System.out.println(s);
		}
	}
}

          执行上面的程序我们发现,如果你输入空格,系统不会有什么反映,如果你输入带空格的句子,系统会直接给你分成好几段。在上面的例子中我们希望能一直从键盘获取输入,所以我们用了一个while循环,只要能获取到下一个输入,就不会退出,这导致我们无法正常的从程序上结束它,所以我们可以事先约定一个表示结束的字符串,比如“over”,下面我们用nextLine()来展示

import java.util.Scanner;

public class OfferServer{	
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		String closeword = "over";
		while(scan.hasNextLine()){
		String s = scan.nextLine();
		System.out.println(s);
		if("over".equals(s)) break;
		}
		
	}
}

           使用nextLine()我们发现,我们可以在里面输入带空格句子,除非我们按下回车,不然系统会一直等着我们的输入。请注意我们在判断输入是不是字符串"over"时,我们使用了 "over".equals(s),而不是 s=="over",这是因为,当比较双方是基本数据类型时,==的比较对值的比较,而比较双方是引用变量时,==比较的是两个引用变量的地址。而equals的比较是比较两个引用变量所对应对象的内容是否相等。

            那为什么我们写成"over".equals(s)而不写成 s.equals("over"),这是因为s是一个不确定的值,我们并不知道它会是什么内容,它有可能是null,而我们之前说过,对于null的调用很可能引来NullPointerException,但是"over"是一个很明确的值,它绝对不是null,所以写成"over".equals(s)绝对不会出现空指针异常。

请注意,==和equals的区别,以及 "".equals(s)和s.equals("")的区别这两个问题都是面试中经常会出现的问题!!

            

import java.util.Scanner;

public class OfferServer{	
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int time = 0;
		int sum = 0;
		while(scan.hasNextInt()){
		int i = scan.nextInt();
		time++;
		sum += i;
		}
		System.out.println("你输入了"+time+"个数,它们的和是"+sum);
	}
}

java rsa 原理 java中的rs是什么意思_字符串_05

            上面的例子中,我们发现如果我们输入非数字内容,它就会自动结束跳出循环,所以我们不必要像输入字符串一样定义一个结束符号。nextDouble和nextInt用法类似,这里就不再举例介绍了。