Java入门_第七课数组及排序方法

-------------------------数组的定义-------------------------------------

(1)数组的四要素:类型,下标,标识符,元素

(2)静态数组的长度是固定的,下标从0开始

(3)定义:类型  [] 名字=new 类型[长度];

(4)取长度:名字.lenght;lenght 是属性,如果加上lenght()方法。

(5)取元素:名字[下标]

(6)数组一旦被定义都会有默认值:

      String--->null

      int    --->0

      double-->0.0

      boolean-->false

--------------------------排序方法---------------------------------------------------------

冒泡排序法:

    取相邻的两个数字依次比较,在N-1轮后,会把最大或者最小的数字冒到最上面。

    (1)外循环n-1

    (2)内循环n-1-i

    (3)比较n[j] n[j-1]


比较交换法:

    从第一个数字开始依次和后面的所有数据比较,在N-1轮后,会按照索引位置依次排序。

  (1)外循环n-1 

  (2)内循环j=i+1 到n;

---------------------------------练习题1----------------------------------------------------------------

//练习1:录入五种水果的价格和名称,根据价格降序输出对应的名称。

public class Demo6 {

  public static void main(String[] args) {

      double [] cj=new double[5];

      String [] names=new String [5];

      Scanner scanner=new Scanner(System.in);

      for (int i = 0; i < cj.length; i++) {

  System.out.println("请输入第"+(i+1)+"水果的价格"); 

  cj[i]=scanner.nextDouble();


  System.out.println("请输入第"+(i+1)+"水果的名字"); 

  names[i]=scanner.next();

      }

      System.out.println("-----排序前的价格-------");

      for (int i = 0; i < cj.length; i++) {

  System.out.println(cj[i]);

      }

      //冒泡排序法

      for (int i = 0; i < cj.length-1; i++) {

  for (int j = 0; j < cj.length-i-1; j++) {

      //相邻的两个数据是cj[j]  cj[j+1]

  double cc=0;

  String temp="";

  if(cj[j]<cj[j+1])

  {

  cc=cj[j];

  cj[j]=cj[j+1];

  cj[j+1]=cc;

  //交换数组中的名字

  temp=names[j];

  names[j]=names[j+1];

  names[j+1]=temp;

  }

  }

  }

      System.out.println("------排序后----------");

      for (int i = 0; i < cj.length; i++) {

  System.out.println(names[i]+"水果的价格是:"+cj[i]);

      }

  }

}

-------------------------------练习2--------------------------------------------------------

/***

* 端午节进行赛龙舟比赛,长度为1000米,随机产生100名选手的速度(1-100)秒/米。

          按照时间降序输出比赛结果

* @author Administrator

*

*/

public class Demo8 {

  public static void main(String[] args) {

  double [] seed=new double[100];

  for (int i = 0; i < seed.length; i++) {

    //[0,0.99999]

  int number=(int)(Math.random()*100+1);

  seed[i]=number;

  }

  //排序

  for (int i = 0; i < seed.length-1; i++) {

  for (int j = 0; j < seed.length-i-1; j++) {

  double cc=0;

  if(seed[j]<seed[j+1])

  {

  cc=seed[j];

  seed[j]=seed[j+1];

  seed[j+1]=cc;

  }

  }

      }

  for (int i = 0; i < seed.length; i++) {

  System.out.println("时间:"+1000/seed[i]);

  }

  }

}

----------------------------------------练习题3-----------------------------------------------

//练习1:循环录入1-5任意的数字,0的时候退出,统计1-5的数字各有多少个?

    public static void main(String[] args) {

    Scanner scanner=new Scanner(System.in);

    //定义一个数组  a ,b,c,d 的个数

int [] number={0,0,0,0};

//String [] dd={"a","b","c","d"};

int ifexit=1;

do {

System.out.println("请输入a,b,c,d or n退出 ");

String result=scanner.next();

if(result.equals("a"))

{

number[0]++;

}else if(result.equals("b"))

{

number[1]++;

}

else if(result.equals("c"))

{

number[2]++;

}

else if(result.equals("d"))

{

number[3]++;

}

else if(result.endsWith("n")) {

ifexit=0;

}

else {

System.out.println("输入错误!!!!");

}

} while (ifexit==1);

/*for (int i = 0; i < dd.length; i++) {

System.out.println(dd[i]+":"+number[i]);

}*/

/* char a='a';

  System.out.println((int)a);

  int b=97;

  System.out.println((char)b);

*/

//

//i  0- 3

for (int i = 0; i < number.length; i++) {

    int b=i+97;

    //97-100

    System.out.println((char)b+"它的个数"+number[i]);

}

}

-------------------------------练习4---------------------------------------------

/***

* 取数组最大值或最小值

* @author Administrator

*

*/

public class Demo3 {

    public static void main(String[] args) {

    Scanner scanner=new Scanner(System.in);

String names[]=new String[5];

double prices[]=new double[5];

double max=0;

int index=0;

for (int i = 0; i < prices.length; i++) {

System.out.println("输入价格:");

prices[i]=scanner.nextDouble();

System.out.println("输入名字:");

names[i]=scanner.next();

if(i==0)

{

max=prices[i];

}

else

{

if(prices[i]>max)

{

max=prices[i];

//价格最大的下标

index=i;

}

}

}

System.out.println(names[index]+":"+max);

System.out.println("======================");

for (int i = 0; i < prices.length; i++) {

System.out.println(names[i]+":"+prices[i]);

}

}

}

--------------------------------二位数组--------------------------------------------------

思考:如何使用数组存储3个班级5名学生的成绩??

定义: 类型   [][]变量 =new  int [数值][],二位数组必须有行,列可以没有,但是取这列上的数据时会报错。

            类型   [][]  a={{1,2,3,4},{1,2}}    a[1][3] 无法赋值也无法取值。

            二维数组的长度是行的长度。 

            二位数组的下标从0开始。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容