大数据之路day04_1--数组 and for循环进阶
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循环进阶的更多相关文章
- C#码农的大数据之路 - 使用C#编写MR作业
		系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ... 
- 大数据之路week01--自学之集合_1(Collection)
		经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ... 
- 大数据之路week04--day06(I/O流阶段一  之异常)
		从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房 ... 
- 胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作
		一.引言 5月8日,作为受邀嘉宾,参加了Intel与Cloudera在北京中国大饭店新闻发布会,两家公司宣布战略合作,该消息成为继Intel宣布放弃大数据平台之后的另外一个热点新闻.对于Intel的放 ... 
- 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例
		一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ... 
- 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM
		引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ... 
- 胖子哥的大数据之路(7)- 传统企业切入核心or外围
		一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ... 
- 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
		引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文: The NoSQL Ecosystem 目录 The NoSQL Eco ... 
- 胖子哥的大数据之路(四)- VisualHBase功能需求框架
		一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ... 
随机推荐
- java不支持多继承
			java不支持多继承,但支持多重继承,即一个类只能继承一个类,使用extends关键字 一个类可以实现多个接口,接口之间用逗号分隔,使用implements关键字 一个接口可以继承多个其他接口,接口之 ... 
- mysql启动错误1067进程意外终止的解决方法
			一.环境介绍 1.mysql主从复制中的从服务器 2.Windows Server 2008 R2 Enterprise系统 64位操作系统 3.MySQL数据库版本为5.6.34 二.报错详情 从服 ... 
- cmd 环境下载文件的几种方法
			今天渗透测试面试提到cmd下载文件 ,自己只写了js和certutil,还有几种常见的方法自己没想起来 这里记录和总结下 . (自己还是太菜太垃圾.) 0x01 certutil certutil ... 
- [LUOGU1437] 敲砖块
			题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 33 33 7 ... 
- 收益 or 挑战?Serverless 究竟给前端带来了什么
			作者 | 黄子毅(紫益) 阿里前端技术专家 导读:前端开发者是最早享受到 "Serverless" 好处的群体,因为浏览器就是一个开箱即用.甚至无需为计算付费的环境!Serverl ... 
- Mysql数据类型最细讲解
			文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 数据库中事务是最重要的概念之一,所以上篇着重谈了谈数据库中事务的使用,并且举了实例如何在实际开发中去使用事务进 ... 
- MyCat教程二:mysql主从复制实现
			单个mysql数据库在处理业务的时候肯定是有限的,这时我们扩展数据库的第一种方式就是对数据库做读写分离(主从复制),本文我们就先来介绍下怎么来实现mysql的主从复制操作. 1. 读写分离 原 ... 
- boost::asio::tcp
			同步TCP通信服务端 #include <boost/asio.hpp> #include <iostream> using namespace boost::asio; in ... 
- Git基本使用指南
			一.概述 1. Git与SVN比较 目前用到最广泛的版本控制软件就是SVN和Git,那么这两者之间有什么不同之处呢? 1) SVN(Subversion)是集中式管理的版本控制器,而Gi ... 
- CSAPP:逆向工程【缓冲区溢出攻击】
			逆向工程[缓冲区溢出攻击] 任务描述 掌握函数调用时的栈帧结构,利用输入缓冲区的溢出漏洞,将攻击代码嵌入当前程序的栈帧中,使程序执行我们所期望的过程. 主要方法 溢出的字符将覆盖栈帧上的数据,会覆盖程 ... 
