这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
文章目录
创建数组
第一种创建方式
int[] a = new int[5];
复制代码
几点说明:
1、新建长度是5的数组
2、每个地址都存放默认值0
3、把一个数组赋值给变量 a,是把这个数组的内存地址赋值给了变量 a,将来就可以通过数组的存储空间来访问数组了
第二种创建方式
int[] a = {1,2,3,4,5};
复制代码
第三种创建方式
给数组变量a重新赋一个新的数组
a = new int[]{6,7,8};
复制代码
访问数组
获取下标为0的值
a[0]
复制代码
数组长度
a.length
复制代码
几点说明:
1、数组一旦创建,长度不可变
2、最大下标值是a.length-1
3、数组长度可以是0
数组遍历
for (int i = 0; i < a.length; i++) {
a[i];
}
复制代码
练习:随机产生双色球
双色球游戏规则
红球一共6组,每组从1-33中抽取一个,六个互相不重复。然后蓝球是从1-16中抽取一个数字,这整个组成双色球
xml
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="随机产生双色球" />
<TextView
android:id="@+id/red"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#FF0000"
android:textSize="18sp" />
<TextView
android:id="@+id/blue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#0000FF"
android:textSize="18sp" />
复制代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button button;
TextView redText;
TextView blueText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int[] r = new int[33];
int[] b = new int[16];
for (int i = 0; i < 33; i++) {
r[i] = i + 1;
}
for (int i = 0; i < 16; i++) {
b[i] = i + 1;
}
//将数组转换成String类型输出的
Log.d("双色球", "红色:" + Arrays.toString(r));
Log.d("双色球", "蓝色" + Arrays.toString(b));
//红球结果数组和标记数组
int[] red = new int[6];
boolean[] flag = new boolean[33];
for (int i = 0; i < 6; i++) {
int j;
do {
//r数组中随机挑选下标赋值给
j = new Random().nextInt(33);
} while (flag[j]);//如果选过重新选择
red[i] = r[j];
flag[j] = true;
}
//蓝球结果数组
int blue = b[new Random().nextInt(16)];
//用两个textview显示结果
redText = findViewById(R.id.red);
blueText = findViewById(R.id.blue);
redText.setText("红球:" + Arrays.toString(red));
blueText.setText("蓝球:" + blue);
}
}
复制代码
运行程序,结果如下;
练习:猜字母
public class Main {
public static void main(String[] args) {
//随机产生5个不重复的大写字母
char[] s = random();
System.out.println("已产生5个不重复大写字母");
while (true) {
System.out.println("猜");
//获得用户输入的字符串
String input = new Scanner(System.in).nextLine();
//为和上面数组比较,将字符串转换为字符数组
char[] inputResult = input.toCharArray();
String result = compare(inputResult, s);
System.out.println(result);
//如果结果是“5A0B”表示猜对,结束
if (result.equals("5A0B")) {
break;
}
}
}
static char[] random() {
//创建长度26的char数组
char[] c = new char[26];
//顺序放入A-Z
for (int i = 0; i < c.length; i++) {
c[i] = (char) ('A' + i);
}
//访问前5个位置。这一步的目的是把前5个字母和后边调换,来产生不重复的字母
for (int i = 0; i < 5; i++) {
int j = i + new Random().nextInt(26 - i);
char temp = c[i];
c[i] = c[j];
c[j] = temp;
}
System.out.println(Arrays.toString(c));
//截取前5个字母,组成新的数组
char[] result = Arrays.copyOf(c, 5);
System.out.println("截取后的前五个字母:" + Arrays.toString(result));
return result;
}
static String compare(char[] input, char[] result) {
int a = 0;
int b = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (input[i] == result[j]) {
if (i == j) {
//字母相等,位置相等
a++;
} else {
//字母相等,位置不等
b++;
}
//因为是5个不同字母,所以找到相同的就break
break;
}
}
}
return a + "A" + b + "B";
}
}
复制代码
运行结果:
数组工具类java.util.Arrays
Arrays.toString(数组)
数组中的值连接成字符串[值1,值2]
Arrays.copyOf(数组, 长度)
将数组复制成指定长度的新数组,会创建一个新数组
System.arraycopy(原数组, 原数组起始位置, 目标数组, 目标数组起始位置, 复制数据数量);
复制数组
Arrays.sort(数组);
数组排序
优化的快速排序算法
Arrays.binarySearch(Object[], Object key);
二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的
作用是通过二分法在已经排好序的数组中查找指定的元素,并返回该元素的下标
1、如果数组中存在该元素,则会返回该元素在数组中的下标
2、如果数组中不存在该元素,则会返回 -(插入点 + 1) 。这里的插入点具体指的是:如果该数组中存在该元素,那个元素在该数组中的下标
Arrays.fill(数组, 1);
在数组中填满指定值
这些方法都很实用,大家可以自己测试下
二维数组介绍
二维数组就是存储一维数组(内存地址/引用)的数组
创建数组
int[][] a = new int[3][2];
复制代码
几点说明:
1、 共创建了4个数组,一个外围数组和3个内部数组
2.、外围数组长度是3,内部每个数组长度是2
3、 外围数组中保存的是一个数组的内存地址
int[][] a = new int[3][];
复制代码
1、只创建一个外围数组
2、3个位置都是null
3、可以之后再创建数组放入
a[0] = new int[5];
a[1] = new int[]{7,4}
a[2] = new int[]{5,3,7,4}
当然也可以直接赋值
int[][] a = {
{2,1,5,6},
{4,5},
{2,4}
};
复制代码
访问
a[0][1]
a[2][0]
复制代码
遍历
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.println(a[i][j]);
}
}
复制代码