Java数组

在开始之前,提一个十分重要的一点:注意:
在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小。创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小。在java数组中,数组只有length属性,并没有字符串的length()方法!!!

学习Java少不了对数组的学习,也就是说,从这节开始,我们的学习难度慢慢增加,代码思维更加复杂。

什么数组: 数组是由相同类型的若干项组成的一个数据集合,数组中的每个数据称为元素。

数组声明格式:(3种)

1、数据类型[] 数组名称 = new 数据类型[数组大小];

2、数据类型[] 数组名称 = new 数据类型[]{数组元素};

3、数据类型[] 数组名称 = {数组元素};

数组包括 一维数组和多维数组,在这里说一维数组和二维数组。

一、一维数组

一维数组的定义和初始化:

int[] arr = new int[5]; //初始化一个大小为5的一个一维数组。

int[] arr = new int[]{1,2,3,4,5}; //初始化一个大小为5的一个一维数组,里面的内容为1,2,3,4,5。

int[] arr = {1,2,3,4,5};  //初始化一个大小为5的一个一维数组,里面的内容为1,2,3,4,5。

注:具体要使用什么方式初始化,要看题目具体的要求,不做要求的话,个人建议使用第一种,可以自己手动输入里面的元素,也可以进行插入操作。

例子1:用一个一维数组存储元素并用循环将其输出(注意,数组不能直接输出名字,这样只是输出它指向的地址)

 package day04;

 public class exer2 {
public static void main(String[] args) {
String[] a = new String[] {"Nike背包","Adudas运动衫","李宁运动鞋","Kappa外套","361°腰包"};
System.out.println("本次活动特价商品有:");
for(int i = 0;i<a.length;i++) {
System.out.println(a[i]); } /*System.out.println(a);*/ } }

数组中我们常用的方法有:

1、数组排序方法  java.util.Arrays.sort();

例子:初始化一个一维数组,插入一个元素进行排序。

 package day04;

 import java.util.Scanner;

 public class exer5 {
// {"a","c","u","b","e","p","f","z"};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] s = new String[9];
s[0] = "a";
s[1] = "c";
s[2] = "u";
s[3] = "b";
s[4] = "e";
s[5] = "p";
s[6] = "f";
s[7] = "z"; System.out.print("元字符序列:");
for(int i =0;i<s.length;i++) {
System.out.print(s[i]+" ");
} System.out.println();
System.out.print("待插入的字符是:");
String a = sc.next(); s[8] = a;
java.util.Arrays.sort(s); System.out.print("排序后的序列:");
for(int i =0;i<s.length;i++) {
System.out.print(s[i]+" ");
} } }

2、数组转换成字符串的方法  Array.toString();

例子:从控制台输入5名学生的成绩,用一维数组接收并且将其进行降序排序。

 package day04;

 import java.util.Scanner;

 public class exer2_4 {
public static void main(String[] args) { int[] stu = new int[5];
Scanner sc = new Scanner(System.in);
System.out.print("请输入五名学员的成绩:");
for(int i = 0;i<stu.length;i++) {
int a = sc.nextInt();
stu[i] = a;
}
System.out.println("此时的学生成绩为:");
System.out.println(java.util.Arrays.toString(stu)); for(int x = 0;x<stu.length;x++) {
for(int y = x;y<stu.length;y++ ) {
if(stu[x]<stu[y]) {
int temp = stu[y];
stu[y] = stu[x];
stu[x] = temp;
}
}
}
System.out.println("排序后的学生成绩为:");
System.out.println(java.util.Arrays.toString(stu)); } }

输出结果:

 3、数组复制方法 

System.arraycopy(原数组名称,从原数组哪个地方开始复制,目标数组名称,从目标数组哪个位置开始复制,复制的长度);
 package homework;

 public class ArrayDemo4 {

     public static void main(String[] args) {
/*
*数组操作的方法
*
*/ //数组方法---数组复制 System.arraycopy(原数组名称,从原数组哪个地方开始复制,目标数组名称,从目标数组哪个位置开始复制,复制的长度);
int a1[] = new int[] {12,32,43,5,4,43,2};
int a2[] = new int[] {11,22,33,44,55,66}; System.arraycopy(a1, 3, a2, 1, 3); for(int i = 0;i<a2.length;i++) {
System.out.print(a2[i]+" "); //11 5 4 43 55 66
}
System.out.println("--------------------"); //数组排序 java.util.Arrays.sort(数组名称);
int a3[] = new int[] {21,43,54,4,345,65,23,1,32};
java.util.Arrays.sort(a3);
for(int i = 0;i<a3.length;i++) {
System.out.print(a3[i]+" ");
} } }

 二、二维数组

二维数组的定义和初始化:
1、int[][] array = {{1,2,3},{4,5,6}};

2、int[][] array = new int[][]{{1,2,3},{4,5,6}};//数组的个数由后面初始化的实体给出

3、int[][] array = new int[2][3];

注意:如果采用第三种的方式初始化,赋值不能直接在后面添加,要利用for循环嵌套进行赋值。

例子:循环输入顾客商品价格,并且判断有几个商品可以打折。

 package day04;

 import java.util.Scanner;

 public class exer2_5 {
public static void main(String[] args) {
int count = 0;
float[][] mans = new float[3][3];
Scanner sc = new Scanner(System.in);
for(int i = 0;i<3;i++) {
System.out.println("请输入第"+(i+1)+"个人购物的三件商品的价格:");
for(int j = 0;j<3;j++) {
float a = sc.nextFloat();
mans[i][j] = a;
if(a>300) {
count++;
}
}
System.out.println("第"+(i+1)+"个人共有"+count+"件商品享受8折优惠!");
count = 0; } } }

三、数组实现冒泡排序、选择排序

1、冒泡排序

 package day04;

 public class MaoPao {
public static void main(String[] args) {
//数组
int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
//外部循环
System.out.println("开始第1次遍历对比");
for(int i=0;i<arr.length-1;i++){
//相连两个数的索引是利用内部循环
for(int index=0;index<arr.length-1-i;index++){
//同样利用中间变量,注意区分与选择排序的区分
if(arr[index]>arr[index+1]){
int temp=arr[index];
arr[index]=arr[index+1];
arr[index+1]=temp;
}
}
System.out.println(java.util.Arrays.toString(arr));
System.out.println("开始第"+(i+2)+"次遍历对比");
}
System.out.println(java.util.Arrays.toString(arr)); //Arrays.toString() 返回指定数组的内容的字符串表示形式。
} }

冒泡排序是相邻的两两进行比较,如果前一个大于后一个,两两交换位置,使得最终数组成升序的顺序排序。

2、选择排序

 package day04;

 public class Choice {
public static void main(String[] args) {
// 数组
int[] arr = { 5, 3, 7, 2, 6, 7, 6, 5, 4, 1, 9, 8 };
// 第一次循环,是确定一个数依次和后面数的比较的数。
for (int i = 0; i < arr.length - 1; i++) {
// 这个是和第一个数的比较的数
for (int j = i + 1; j < arr.length; j++) {
// 定义一个临时的变量,用来交换变量
int temp;
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
System.out.println("arr["+i+"]="+arr[i]);
System.out.println("arr["+j+"]="+arr[j]);
System.out.println(); }
}
// 打印最后的排序结果
System.out.println(java.util.Arrays.toString(arr));
} }

选择排序是由一个开始与所有的进行比较,如果有比它小的,交换位置,然后第二个与后面的进行比较,如此比下去,进行交换,使得最终数组成升序的顺序进行排序

四、For循环进阶

利用for循环,实现较为复杂的图形,更好的理解for循环的执行过程。

例子1、实现正直角三角形,手动输入三角形的高,每一行为奇数

 package day04;

 import java.util.Scanner;

 public class exer2_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入直角三角形的高:");
int height = sc.nextInt();
for(int i = 0;i<height;i++) {
for(int j = 0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println("");
}
}
}

运行结果:

例子2、实现倒直角三角形,手动输入三角形的高,每一行为奇数

 package day04;

 import java.util.Scanner;

 public class exer2_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入直角三角形的高:");
int height = sc.nextInt();
for(int i = 0;i<height;i++) {
for(int j = i;j<height;j++) {
System.out.print("*");
}
System.out.println("");
}
} }

运行结果:

例子3、实现正等腰三角形,手动输入三角形的高,每一行为奇数

 package day04;

 import java.util.Scanner;

 public class exer2_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入直角三角形的高:");
int height = sc.nextInt();
for (int i = 0; i < height; i++) {
for (int j = 0; j < height - i - 1; j++) {
System.out.print(" ");
}
for (int k = 0; k < (i * 2 + 1); k++) {
System.out.print("*");
}
System.out.println("");
} } }

运行结果:

大数据之路day04_1--数组 and for循环进阶的更多相关文章

  1. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  2. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

  3. 大数据之路week04--day06(I/O流阶段一 之异常)

    从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ...

  4. 胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作

    一.引言 5月8日,作为受邀嘉宾,参加了Intel与Cloudera在北京中国大饭店新闻发布会,两家公司宣布战略合作,该消息成为继Intel宣布放弃大数据平台之后的另外一个热点新闻.对于Intel的放 ...

  5. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

  6. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  7. 胖子哥的大数据之路(7)- 传统企业切入核心or外围

    一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...

  8. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  9. 胖子哥的大数据之路(四)- VisualHBase功能需求框架

    一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...

随机推荐

  1. Java读源码之Thread

    前言 JDK版本:1.8 阅读了Object的源码,wait和notify方法与线程联系紧密,而且多线程已经是必备知识,那保持习惯,就从多线程的源头Thread类开始读起吧.由于该类比较长,只读重要部 ...

  2. spring5 源码深度解析----- 事务的回滚和提交(100%理解事务)

    上一篇文章讲解了获取事务,并且通过获取的connection设置只读.隔离级别等,这篇文章讲解剩下的事务的回滚和提交 回滚处理 之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非 ...

  3. Java中获取刚插入数据库中的数据Id(主键,自动增长)

    public int insert(String cName, String ebrand, String cGender) { String sql = "insert into Clot ...

  4. 代码审计-thinkphp3.2.3框架漏洞sql注入

    开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...

  5. CTF-SSH服务渗透

    环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.101 0x01信息探测 首页发现有类似用户名的信息 先记录下来 Martin N Hadi M Jimmy ...

  6. 《Java并发编程实战》读书笔记-第5章 基础构建模块

    同步容器类 同步容器类实现线程安全的方式:将所有状态封装起来,对每个公有方法使用同步,使得每一次只有一个线程可以访问.同步容器类包含:Vector.Hashtable.Collections.sync ...

  7. python的递归函数怎么用

    在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数 理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰 使用递归函数需要注意防止栈溢出.由于栈的大小不 ...

  8. 使用maven替换项目依赖中的字节码

    问题描述 我们偶尔会发现一些开源项目的问题,或者出于其他原因,想在某个dependency的代码中加几行或者删除几行来达到目的. 我这里遇到一个dubbo 2.7.3和open feign冲突的问题 ...

  9. Mysql数据库(八)存储过程与存储函数

    一.创建存储过程与存储函数 1.创建存储过程(实现统计tb_borrow1数据表中指定图书编号的图书的借阅次数) mysql> delimiter // mysql> CREATE PRO ...

  10. vue-cli3没有config文件解决方案,在根目录加上vue.config.js文件

    module.exports = { /** 区分打包环境与开发环境 * process.env.NODE_ENV==='production' (打包环境) * process.env.NODE_E ...