java棋子数组_Java数组学习

Java数组学习

1.数组的定义

数组是相同类型数据的有序集合。

数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。

其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

2.数组的声明

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

dataType[] arrayRefVar; // 首选的方法

dataType arrayRefVar[]; // 效果相同,但不是首选方法

Java语言使用new操作符来创建数组,语法如下:

dataType[] arrayRefVar = new dataType [arraySize];

int[] nums=new int[10];

数组的元素是通过索引访问的,数组索引从0开始。

获取数组长度:

arrays.length

3.内存分析

4.数组的三种初始化

静态初始化

int[] a={1,2,3};

Man[] mans={new Man(1,1),new Man(2,2)};

动态初始化

int[] a=new int[2];

a[0]=1;

a[1]=2;

数组的默认初始化

◆数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

public class ArrayDemo02 {

public static void main(String[] args) {

//静态初始化,初始化的时候放几个元素都行,但初始化结束数组空间固定不可修改

int[] a={1,2,3,4,5,6};

System.out.println(a[0]);

//动态初始化:包含默认初始化

int[] b=new int[10];

b[0]=1;

}

}

5.数组的基本特点

1. 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

2. 其元素必须是相同类型,不允许出现混合类型。

3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

4. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。

5. 数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

下标的合法区间: [0, length-1],如果越界就会报错;

public static void main(String[] args) {

int[] a=new int[2];

System. out . println(a[2]);

}

ArrayIndexOutOfBoundsException :数组下标越界异常!

小结:

◆数组是相同数据类型(数据类型可以为任意类型)的有序集合

◆数组也是对象。数组元素相当于对象的成员变量

◆数组长度的确定的,不可变的。如果越界,则报: ArrayIndexOutofBounds

//增强型for循环

public class ArrayDemo04 {

public static void main(String[] args) {

int[] arrays={1,2,3,4,5};

//JDK1.5新特性,没有下标

for (int array : arrays) {//arrays.for

System.out.println(array);

}

}

}

//打印数组元素,数组传值/返回数组

public class ArrayDemo05 {

public static void main(String[] args) {

int[] arrays={1,2,3,4,5};

printArray(arrays);

int[] arrays2;

arrays2=reverse(arrays);

printArray(arrays2);

}

//打印数组元素

public static void printArray(int[] arrays){

for (int array : arrays) {

System.out.print(array);

}

System.out.println("\n");

}

//反转数组

public static int[] reverse(int[] arrays){

int[] result=new int[arrays.length];

for (int i = 0,j=arrays.length-1; i arrays.length ; i++,j--) {

result[j]=arrays[i];

}

return result;

}

}

6.多维数组

public class ArrayDemo06 {

public static void main(String[] args) {

//array[4][2]

/*

1,2 array[0]

2,3 array[1]

3,4 array[2]

4,5 array[3]

*/

int[][] array={{1,2},{2,3},{3,4},{4,5}};

printArray(array[0]);//12

System.out.println(array[0][0]);//1

System.out.println(array.length);//4

System.out.println(array[0].length);//2

//数组遍历

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

for (int j = 0; j array[i].length; j++) {

System.out.println(array[i][j]);

}

}

}

public static void printArray(int[] arrays){

for (int array : arrays) {

System.out.print(array);

}

System.out.println("\n");

}

}

7.Arrays类

数组的工具类java.util.Arrays

由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一-些基本的操作。

查看JDK帮助文档

Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而"不用"使用对象来调用(注意:是"不用"而不是"不能")

具有以下常用功能:

◆给数组赋值:通过fill方法。

◆对数组排序:通过sort方法,按升序。

◆比较数组:通过equals方法比较数组中元素值是否相等。

◆查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

import java.util.Arrays;

public class ArrayDemo07 {

public static void main(String[] args) {

int[] a={1,2,3,4,9090,31231,543,21,3,23};

System.out.println(a);//[I@14ae5a5

//打印数组元素Arrays.toString()

System.out.println(Arrays.toString(a));

printArray(a);

//数组排序从小到大

Arrays.sort(a);

System.out.println(Arrays.toString(a));

//数组填充

Arrays.fill(a,2,4,0);//把a[2]-a[4-1]个元素填充为0

System.out.println(Arrays.toString(a));

}

//造轮子

public static void printArray(int[] a){

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

if(i==0){

System.out.print("[");

}

if(i==a.length-1){

System.out.println(a[a.length-1]+"]");

}else{

System.out.print(a[i]+", ");

}

}

}

}

8.冒泡排序

//时间复杂度O(n2)

public class ArrayDemo08 {

public static void main(String[] args) {

int[] nums={1,2,3,4};

sort(nums);

}

//冒泡排序

//1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置

//2.每一次比较都会产生一个大数和小数

//3.下一轮循环可以少一次比较

//4.依次循环直到结束

public static void sort(int[] array){

//外层循环

int result=0;

boolean flag=false;

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

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

if(array[j]array[j+1]){

result=array[j];

array[j]=array[j+1];

array[j+1]=result;

flag=true;

}

}

if(flag==false){

break;

}

}

for (int i : array) {

System.out.println(i);

}

}

}

9.稀疏数组

public class ArrayDemo09 {

public static void main(String[] args) {

//创建一个二维数组11*11 0:没有棋子, 1:白棋 , 3. 黑棋

int[][] array1=new int[11][11];

array1[1][2]=1;

array1[2][3]=2;

//输出原始的数组

System.out.println("输出原始数组");

for (int[] ints : array1) {

for (int anInt : ints) {

System.out.print(anInt+"\t");

}

System.out.println();

}

//转换为稀疏数组

//获取有效值的个数

int sum=0;

for (int i = 0; i 11; i++) {

for (int j = 0; j 11; j++) {

if(array1[i][j]!=0){

sum++;

}

}

}

System.out.println("有效值的个数="+sum);

//2.创建一个稀疏数组

int[][] array2=new int[sum+1][3];

array2[0][0]=11;

array2[0][1]=11;

array2[0][2]=3;

//遍历二维数组,将非0值存放到稀疏数组

int count=0;

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

for (int j = 0; j array1[i].length ; j++) {

if(array1[i][j]!=0){

count++;

array2[count][0]=i;

array2[count][1]=j;

array2[count][2]=array1[i][j];

}

}

}

//输出稀疏数组

System.out.println("输出稀疏数组");

for (int[] ints : array2) {

for (int anInt : ints) {

System.out.print(anInt+"\t");

}

System.out.println();

}

//还原稀疏数组

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

System.out.println("还原");

//1.读取稀疏数组

int[][] array3=new int[array2[0][0]][array2[0][1]];

//2.还原数组

for (int i = 1; i array2.length; i++) {

array3[array2[i][0]][array2[i][1]]=array2[i][2];

}

System.out.println("输出稀疏数组");

for (int[] ints : array3) {

for (int anInt : ints) {

System.out.print(anInt+"\t");

}

System.out.println();

}

}

}

Java数组学习 相关文章

高数学习笔记之范数与距离度量(python实现)

0x00 范数 norm表示范数,函数参数如下: x_norm=np.linalg.norm(x, ord=None, axis=None, keepdims=False) import numpy as np from numpy import linalgx = np.array([3,4])# 向量范数(默认参数ord=None,axis=None,keepdims=False)print('L1=\n',linal

Javascript 原型与原型链

目录 不是对象的“对象” 原型和原型链 总结 参考 不是对象的“对象” JS中的数据类型可分为基本类型(包括数字、字符串、布尔等)和对象,这两者是有有本质差别的。你可能见过类似“JS中一切都是对象”的描述,但实际上这是不够严谨的。更合理的表述应该是“

requests模块

python学习-requests模块 HTTP for Humans requests 方法理解 基本Get请求 //ex_1.py# -*- coding: utf-8 -*-#requests.get()import requestskey = {'wd':'python语言'}# key = {'wd': 'python语言', 'pn': ''} headers = {"User-Agent": "Mozilla/5.0 (Wind

java笔记002

各个数值拓展 //整数拓展 进制 二进制 十进制 八进制 十六进制 int i = 10;int i2 = 010;//八进制0 int i3 = 0X10;//十六进制0x 0~9 A~F(相当于10到16)System.out.println(i); System.out.println(i2); System.out.println(i3); String ccc ="-------------

Java多线程(四)——volatile关键字原理

iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 学习自: 要搞懂 volatile 关键字,就靠这 26 张图 面试官没 想到,一个Volatile,敖丙都能吹半小时 1、volatile关键字 缓存一致性协议 现代CPU都是多核处理器。由于cpu核心(Kernel)读取内存数据较慢,

Rust学习笔记#1:一个猜谜游戏小项目

在深入探索Rust语法的细枝末节之前,先通过一个麻雀虽小但五脏俱全的小项目来整体把握Rust,这样可以避免迷失在细节的海洋中。我们可能会通过这个小项目一下子接触到很多新概念,但不必惊慌,我们只需浅尝辄止对这些概念有个印象即可。 《TRPL》(Rustaceans

Java多线程(五)——synchronized关键字原理

iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 学习自: 17 张图看穿 synchronized 关键字 死磕Synchronized底层实现 1、Java对象的内存表示 Java 对象在内存中的表示方法: 内存中的对象一般由三部分组成,分别是对象头、对象实际数据和对齐填充。 对

Java的学习之路

我的Java学习路线 2021年2月2日 JavaSE基础 2021年2月2日 1.博客 推荐写博客,写博客可以提升自己各方面的能力,例如语言组织能力、知识总结能力、人际交往能力等等,写博客贵在坚持,日积月累才能锻炼自己。推荐的网站有CSDN、博客园、自己搭建。 作者参考B

请问什么时候对象分配会不在 TLAB 内分配

Java 对象分配流程 我们这里不考虑 栈上分配 ,这些会在 JIT 的章节详细分析,我们这里 考虑的是无法栈上分配需要共享的对象 。 对于 HotSpot JVM 实现,所有的 GC 算法的实现都是一种对于堆内存的管理,也就是都实现了一种堆的抽象,它们都实现了接口 Colle

SpringBoot学习

SpringBoot学习 什么是SpringBoot他的优点是什么 SpringBoot简介 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot官方介绍简介可以看到下面的一段介绍 : Spring Boot的设计目的是让您尽可能快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的二维数组是一个数组数组,也就是说它包含多个一维数组,每个一维数组又包含多个元素。 定义二维数组 Java中定义二维数组的通用语法如下: 数据类型[][] 数组名 = new 数据类型[行数][列数]; 例如,定义一个3行4列的二维数组intArray: int[][] intArray = new int[3][4]; 赋值和访问二维数组元素 二维数组的元素可以通过行列索引来访问和修改。例如,可以使用以下语句给第2行第3列的元素赋值为10: intArray[1][2] = 10; 可以使用以下语句访问第1行第2列的元素的值: int value = intArray[0][1]; 遍历二维数组 可以使用嵌套循环来遍历二维数组的所有元素。例如,以下代码可以输出二维数组intArray的所有元素: for (int i = 0; i < intArray.length; i++) { for (int j = 0; j < intArray[i].length; j++) { System.out.print(intArray[i][j] + " "); } System.out.println(); } 输出结果为: 0 0 0 0 0 0 10 0 0 0 0 0 二维数组的应用 二维数组常用于表示矩阵、地图等二维数据结构。例如,以下代码使用二维数组表示一个3x3的井字棋游戏: char[][] ticTacToe = new char[3][3]; 可以使用以下代码将井字棋棋盘初始化为空格: for (int i = 0; i < ticTacToe.length; i++) { for (int j = 0; j < ticTacToe[i].length; j++) { ticTacToe[i][j] = ' '; } } 可以使用以下代码将井字棋棋盘输出到控制台: for (int i = 0; i < ticTacToe.length; i++) { for (int j = 0; j < ticTacToe[i].length; j++) { System.out.print(ticTacToe[i][j] + " "); } System.out.println(); } 输出结果为:                   可以使用以下代码在第2行第2列落子: ticTacToe[1][1] = 'X'; 可以使用以下代码在第1行第3列落子: ticTacToe[0][2] = 'O'; 可以使用以下代码检查第1行是否已经有三个相同的棋子: if (ticTacToe[0][0] == ticTacToe[0][1] && ticTacToe[0][1] == ticTacToe[0][2]) { System.out.println(ticTacToe[0][0] + " wins!"); } 可以使用类似的方式检查其他行、列和对角线是否已经有三个相同的棋子

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值