Java---Capítulo 4
una matriz
conocimiento básico
concepto:
Una matriz es una estructura de datos común en los lenguajes de programación que puede almacenar un conjunto de datos del mismo tipo
Función:
almacena un conjunto de datos del mismo tipo, conveniente para estadísticas matemáticas (valor máximo, valor mínimo, valor promedio y suma) y muestra información
definición:
public class study {
public static void main(String[] args) {
//1
byte[] bytes = new byte[]{
1,2,3,4,5};
//2
int[] numbers = {
1,2,3,4,5};
}
}
La primera:
- Solo se puede usar cuando se define una matriz y se asigna un valor al mismo tiempo.
El segundo tipo:
- Se puede usar directamente al definir una matriz, o se puede definir primero y luego asignar para usar
Valores predeterminados en la matriz:
- El valor predeterminado en una matriz de números de punto flotante de precisión doble es 0,0
- El valor predeterminado en una matriz de números de punto flotante de precisión simple es 0.0f
- El elemento predeterminado de la matriz de tipo booleano es falso
- El elemento predeterminado en la matriz de tipo char es '\u0000'
- El valor predeterminado para matrices enteras es 0
Elementos basicos:
operación de matriz
Recorrido de matriz:
observe todos los elementos de la matriz
La longitud de la matriz -----> matriz.longitud
public class study {
public static void main(String[] args) {
int[] arr1 = {
1,2,3,4,5};
for(int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
}
}
Operación de modificación de matriz:
caso:
la matriz existente 10, 12, 17, 32, 39, 50, se requiere elevar al cuadrado todos los elementos de la matriz que pueden ser divisibles por 3, y luego volver a colocar el elemento en su posición
public class study {
public static void main(String[] args) {
int[] arr1 = {
10,12,17,32,39,50};
for(int i=0;i<arr1.length;i++){
if(arr1[i]%3==0){
arr1[i] *= arr1[i];
}
}
}
}
Caso de operación de suma de matrices
:
En cierta agencia de boletos aéreos, hay 4 personas, A, B, C, D, E, que están haciendo fila para comprar boletos. El buen amigo de B, F, también está haciendo fila para comprar boletos ahora, y encuentra que B está haciendo cola, por lo que salta en línea a B Después de eso, utilice el conocimiento relevante de matrices para completar el diseño del programa
public class study {
public static void main(String[] args) {
String[] arr = {
"A","B","C","D","E"};
//A B C D E
//A B F C D E
String[] new_arr = new String[arr.length+1];
int co = 2;
for(int i=0;i<co;i++){
new_arr[i]=arr[i];
}
new_arr[co]="F";
for(int j=co;j<new_arr.length;j++){
new_arr[j+1]=arr[j];
}
arr = new_arr;
for(int m=0;m<arr.length;m++){
System.out.println(arr[m]);
}
}
}
Caso de operación de eliminación de matriz
1:
en el caso anterior, el comprador del boleto C se fue por algo y había una persona menos en la cola. Utilice el conocimiento relevante de la matriz para completar el diseño del programa.
public class study {
public static void main(String[] args) {
String[] arr = {
"A","B","C","D","E"};
//A B C D E
//A B D E
String[] new_arr = new String[arr.length-1];
for(int i=0;i<2;i++){
new_arr[i]=arr[i];
}
for(int j=3;j<arr.length;j++){
new_arr[j-1]=arr[j];
}
arr = new_arr;
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
copia de la matriz
gramática:
System.arraycopy(原数组,拷贝的开始位置,目标数组,存放的开始位置,拷贝的元素个数);
De esta manera, podemos reemplazar la copia del bucle for en la pregunta anterior con esta operación de sintaxis
String[] arr = {
"A","B","C","D","E"};
//A B C D E
//A B D E
String[] new_arr = new String[arr.length-1];
for(int i=0;i<2;i++){
new_arr[i]=arr[i];
}
El bucle for se reemplaza por
System.arraycopy(arr,0,new_arr,0,2);
Expansión de matriz
gramática:
数据类型[] 标识符 = Arrays.copyof(原数组,新数组的长度);
Ejemplo:
import java.util.Arrays;
public class study {
public static void main(String[] args) {
String[] arr = {
"A","B","C","D","E"};
//A B C D E
//A B C D E F
String[] new_arr = Arrays.copyOf(arr,arr.length+1);
}
}
Práctica de dos arreglos
tipo de matriz
Los elementos de la matriz se ordenan de menor a mayor o de mayor a menor. Dividido en orden ascendente y orden descendente
Ordenamiento de burbuja:
- Cada vez que se recorre la matriz, se puede obtener un valor máximo (valor máximo, valor mínimo) de los elementos de la matriz
- Al atravesar la matriz cada vez, compare el tamaño de dos elementos adyacentes en la matriz e intercambie posiciones de acuerdo con los requisitos de la disposición.
Caso:
Organice la secuencia 10,70,55,80,25,60 en orden descendente
public class study {
public static void main(String[] args) {
int[] arr = {
10,70,55,80,25,60};
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]<arr[j+1]){
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int j=0;j<arr.length;j++){
System.out.println(arr[j]);
}
}
}
Operaciones de clasificación para herramientas:
Sintaxis:
Arrays.sort(数组名);//将数组中的元素进行升序排列
Arrays.toString(数组名)//将数组中的元素组装成一个字符串
Nota:
Los caracteres se pueden ordenar, ordenados según el orden del diccionario (abcdefg...)
import java.util.Arrays;
public class study {
public static void main(String[] args) {
String[] names = {
"zhangsan","zhangsi","lisi","lisan",
"lisiabc","lisib"};
Arrays.sort(names);
System.out.println(Arrays.toString(names));
}
}
[lisan, lisi, lisiabc, lisib, zhangsan, zhangsi]
búsqueda binaria
También conocida como media búsqueda, como sugiere el nombre, se dividirá en dos intervalos desde el medio cada vez, y el elemento del medio se usará para comparar el tamaño del elemento que se buscará para determinar el intervalo en el que se encuentra el elemento de destino. localizado, y el rango se reducirá a su vez para determinar el elemento
La búsqueda binaria solo funciona en matrices ordenadas
Caso:
encuentre rápidamente la posición del elemento 60 de la secuencia 95, 93, 87, 86, 79, 72, 60, 53
public class study {
public static void main(String[] args) {
int[] numbers = {
95,93,87,86,79,72,60,53};
int target = 60;
int start =0;
int end = numbers.length -1;
while(start<end){
int mid = (start+end)/2;
if(numbers[mid]>target)
{
start = mid;
}else if(numbers[mid]<target){
end = mid;
}else{
System.out.println(mid);
break;
}
}
}
}
Matriz bidimensional
Una matriz es esencialmente unidimensional y una matriz bidimensional se refiere a agregar una matriz unidimensional a una matriz unidimensional. Matriz tridimensional, matriz de cuatro dimensiones, etc.
Definición de una matriz bidimensional:
数据类型[][] 数组名 = new 数据类型[数组的长度][数组的长度]
Por ejemplo: defina una matriz bidimensional con una longitud de 5, cada espacio solo puede almacenar matrices dobles de cualquier longitud,
y 2 también se puede dejar en blanco, lo que significa que puede almacenar... matrices de cualquier longitud
public class study {
public static void main(String[] args) {
double[][] as = new double[5][];
as[0] = new double[]{
12,66};
as[1] = new double[]{
17,91};
as[2] = new double[]{
15,84};
as[3] = new double[]{
14,67};
as[4] = new double[]{
19,86};
}
}
Caso 1:
Grabe 5 piezas de información musical (incluido el nombre, el cantante, el año y el mes de publicación) desde la consola y almacene la información en una matriz
import java.util.Scanner;
public class study {
public static void main(String[] args) {
String[][] music_a = new String[5][3];
Scanner sc = new Scanner(System.in);
for (int i=0;i<music_a.length;i++){
System.out.println("请输入名称:");
String name = sc.next();
System.out.println("请输入歌手:");
String singer = sc.next();
System.out.println("请输入出版年月:");
String date = sc.next();
music_a[i] = new String[]{
name,singer,date};
}
}
}
Caso 2:
Hay 3 clases en el primer grado de cierta escuela, con 10 estudiantes en la primera clase, 8 estudiantes en la segunda clase y 7 estudiantes en la tercera clase, ahora se requiere ingresar los grados y edades de los alumnos de estas 3 clases desde la consola y calcula la nota media y la edad media de cada clase.
import java.util.Scanner;
public class study {
public static void main(String[] args) {
double[][][] stu_cal = new double[3][][];
stu_cal[0] = new double[10][2];
stu_cal[1] = new double[8][2];
stu_cal[2] = new double[7][2];
Scanner sc = new Scanner(System.in);
//录入数据
for(int i=0;i<stu_cal.length;i++){
double[][] ne_cal = stu_cal[i];
for(int j=0;j<stu_cal[i].length;j++){
System.out.println("请输入年龄:");
int age = sc.nextInt();
System.out.println("请输入成绩:");
double score = sc.nextDouble();
ne_cal[j] = new double[]{
age,score};
}
}
//查看数据,并计算平均值
for(int i=0;i<stu_cal.length;i++){
double tolage = 0,tolscore = 0;
double[][] ne_cal = stu_cal[i];
for(int j=0;j<ne_cal.length;j++){
tolage += ne_cal[j][0];
tolscore += ne_cal[j][1];
}
System.out.println("第"+(i+1)+"个班的平均年龄为"+(tolage/ne_cal.length));
System.out.println("第"+(i+1)+"个班的平均成绩为"+(tolscore/ne_cal.length));
}
}
}