为了更方便地处理批量数据,学习了一种新的数据处理方式——数组。
一、一维数组
1、基本概念
一组相同类型的数据,给它们取一个共同的名字,然后通过下标取访问每一个元素。一般而言,数组往往会结合循环结构来进行相应的处理。
2、数组使用步骤
(1)声明数组
(2)分配空间
(3)给数组元素赋值
(4)利用数组元素参与运算
接下来用示例演示如何利用数组来存储一串数据:
package net.wek7;
import java.util.Scanner;
/*
功能:计算一组成绩的平均分,要求用数组保存成绩
日期:2019.4.9
*/
public class CalculateAverage {
public static void main(String[] args) {
//声明部分
double[]score = new double[10];//声明并分配(创建)空间,可以存储十个数,第一个数的下标为:0
double sum=0,average;
Scanner sc =new Scanner(System.in);
//输入部分
for(int i = 0; i < score.length;i++){//初始条件;循环条件;迭代条件
System.out.print("score["+ i +"]=");
score[i] = sc.nextDouble();
}
//处理部分
for(int i = 0; i < score.length;i++){
sum = sum +score[i];
}
average = sum/score.length;
//输出部分
System.out.println("average = "+average);
}
}
运行结果如下:
示例程序:遍访数组,求出最大值及其位置
构思:1、声明数据类型并分配(创建)空间,可以存储十个整数,第一个数的下标为:0;
声明最大值的数据类型;
添加扫描器。
2、表示max存储于数组score中
利用循环结构,定义i= 1(写出i的数据类型);
利用for遍历循环并比较i与数组中数的大小;
如果i的值小于数组中的数,就将数值中的改为数赋值给i,新的i值继续与数组中的数比较大小,直至最后一位,如果i值始终比数据中的数大,则不发生任何赋值;
调用声明部分的扫描器读取输入的整型数据的值。
3、处理部分使最大值=数组中的最大值。
4、输出部分for满足最大值=数组中的最大值,那么就输出其最大值在数组中的下标。
package net.wek7;
/*
功能:找出最大/最小值的位置
日期:2019.4.11
*/
import java.util.Scanner;
public class FindMaxAndPostion {
public static void main(String[] args) {
//声明部分
int[] score = new int[10];
int max;
Scanner sc = new Scanner(System.in);
//输入部分
for(int i = 0; i< score.length;i++){
System.out.print("score["+ i + "]=");
score[i] = sc.nextInt();
}
//处理部分
max= score[0];
for(int i= 1;i<score.length;i++){
if(max < score[i]){
max = score[i];
}
}
//输出部分
System.out.println("maxscore=" + max);
for(int i= 0;i<score.length;i++){
;
if(max == score[i]){
System.out.println("score[" + i + "]=" + max);
}
}
}
}
那么到这里大家是否会好奇如何对数组进行排序呢?其实很简单,对于升序而言,就是直接使用sort
例如:
数组排序,方法很多。我们可以直接利用Arrays类的sort方法来搞定。
1 package net.hw.lesson05;
2
3 import java.util.Arrays;
4
5 /**
6 * 功能:利用Arrays类的sort方法对数组进行排序
7 * 作者:谯婷
8 * 日期:2019年4月16日
9 */
10 public class ArraysDemo {
11 public static void main(String[] args) {
12 // 定义整型数组,采用静态初始化
13 int[] a = {54, 66, 34, 67, 33, 12, -90, 35, 56, 90};
14
15 // 排序前
16 System.out.print("排序前:");
17 for (int i = 0; i < a.length; i++) {
18 System.out.print(a[i] + " ");
19 }
20 System.out.println();
21
22 // 升序处理
23 Arrays.sort(a);
24
25 // 排序后
26 System.out.print("排序后:");
27 for (int i = 0; i < a.length; i++) {
28 System.out.print(a[i] + " ");
29 }
30 }
31 }
结果如下:
如果想要降序呢?
这样呀,就可以很轻松的解决小问题啦
问题:假如说需要创建一个数组b,恰好是数组a的降序排列,怎么来实现呢?
二、二维数组
1、使用二维数组四步曲
(1)声明二维数组
(2)分配内存空间
(3)给数组元素赋值
(4)数组元素参与运算
2、二维数组的访问
(1)访问全部元素(遍历)
(2)访问某个元素
(3)访问某行元素
(4)访问某列元素
示例程序:演示二维数组的用法:
/**
* 功能:演示二维数组的用法
* 作者:谯婷
* 日期:2018年4月17日
*/
package lzy.hw.chapter5;
public class Test2DArray {
public static void main(String[] args) {
int[][] a = new int[3][4]; // 创建3行4列的二维数组
a[0][0] = 34; // 给第1行第1列元素赋值
a[1][2] = 100; // 给第2行第3列元素赋值
System.out.println("a[0][0]=" + a[0][0]);
System.out.println("a[1][2]=" + a[1][2]);
int sum = a[0][0] + a[1][2];
System.out.println("a[0][0]+a[1][2]=" + sum);
// 静态初始化
int[][] b = { { 12, 45, 66, 24 }, { 56, 78, 90, 32 }, { 32, 44, 56, 98 } };
System.out.println("全部元素:");
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j] + " ");
}
System.out.println(); // 换行
}
System.out.println("第2行第3列元素:" + b[1][2]);
System.out.print("第3行的全部元素:");
for (int j = 0; j < b[2].length; j++) {
System.out.print(b[2][j] + " ");
}
System.out.println();
System.out.println("第3列的全部元素:");
for (int i = 0; i < b.length; i++) {
System.out.println(b[i][2]);
}
}
}
运行结果如图:
猜数游戏(一次):
package net.wek7;
/**
功能:猜数游戏,玩一次
*/
import java.util.Random;
import java.util.Scanner;
public class NumberGuessGame01 {
public static void main(String[] args) {
int num,target;
Scanner sc = new Scanner(System.in);
Random random = new Random();
target = random.nextInt(100)+1;//计算机随机产生1~100之间的数
System.out.print("num = ");
num = sc.nextInt();
while (num != target){
//判断输入的数是大还是小,需要给用户一个提示
if(num > target){
System.out.println("Too high!");
}else{
System.out.println("Too low!");
}
System.out.print("num = ");
num = sc.nextInt();
}
System.out.println("That's it!");
System.out.println("Thanks for your playing.");
}
}
猜数游戏(多次):
import java.util.Scanner;
/**
功能:猜数游戏,玩多次
*/
public class NumberGuessGame02 {
public static void main(String[] args) {
int num,target;
String choice;
Scanner sc = new Scanner(System.in);
choice = "y";
while(choice.equalsIgnoreCase("y")){
target = (int)(Math.random()*100)+1;//随机数产生的另一种方法
System.out.print("num = ");
num = sc.nextInt();
while (num != target){
//判断输入的数是大还是小,需要给用户一个提示
if(num > target){
System.out.println("Too high!");
}else{
System.out.println("Too low!");
}
System.out.print("num = ");
num = sc.nextInt();
}
System.out.println("That's it!");
System.out.println("Would you like to play again?[Y/N]");
choice = sc.next();
}
System.out.println("Thanks for your playing.");
}
}
数组输出斐波拉契序列前30项,采用数组
package net.wek8;
/*
功能:数组输出斐波拉契序列前30项,采用数组
日期:2019.4.16
*/
public class FibnacciSeriesUsingArray {
public static void main(String[] args) {
//声明部分
int[] f = new int[30];
//输入部分
f[0] = 1;
f[1] = 1;
//处理部分
for (int i = 2; i < f.length;i++){
f[i] = f[i - 1] + f[i - 2];
}
//输出部分
for (int i = 0;i < f.length;i++){
System.out.print(f[i] + " ");
}
}
}
数组输出斐波拉契序列前30项,不采用数组
package net.wek8;
/**
* 功能:输出斐波拉契序列前30项,不采用数组
*/
public class FibonacciNotUsingArray {
public static void main(String[] args) {
int f1,f2,f3;
f1 = f2 = 1;
System.out.print(f1 + " " + f2);
for (int i = 0;i < 28;i++){
f3 = f1 + f2;
System.out.print(f3 + " ");
f1 = f2;
f2 = f3;
}
}
}
运行结果一样的: