目录
一.复习
-
(一)将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[] nums =new int[101];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 1; i <= n;i++){
nums[i] = input.nextInt();
}
//将第一个元素保存到一个临时变量中
int temp = nums[1];
for (int i = 1;i <= n ;i++){
nums[i] = nums[i+1];
}
//重新给nums[n]赋值
nums[n] = temp;
//打印结果
for (int i = 1;i <= n;i++){
System.out.println(nums[i]+"\t");
}
}
}
- (二)输出一个整数数组中最大的数和最小的数的差值。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[] nums = new int[100];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 1; i <= n; i++) {
nums[i] = input.nextInt();
}
//设置默认一个最大值和最小值
//数组第一个元素
int max = nums[1];
int min = nums[1];
for (int i = 1; i <= n; i++) {
if (nums[i] > max) {
max = nums[i];
}
if (nums[i] < min) {
min = nums[i];
}
}
int result = max - min;
System.out.println(result);
}
}
二.二维数组
-
定义
一维数组的元素可以是任何基本数据类型,二维数组的每一个元素则是一维数组。
又称为矩阵。
- 语法
int[][]score = new int[4][5];
score[0][0] = 10;
score[2][3] = 20;
ps:new int 第一个括号中代表行(row),第二个括号中代表列(column)。
- 二维数组内存表示
二维数组案例
- 输入一个正整数n,输出n×n的回型方阵。
- 思路
ps:图是截取自视频老师讲解 。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[][] nums = new int[10][10];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 1;i <= (n+1) / 2;i++){
for (int j = 1;j <= (n+1) / 2;j++){
nums[i][j] = Math.min(i, j);//左上角
nums[i][n+1-j]=Math.min(i, j);//右上角
nums[n+1-i][j] = Math.min(i, j);//左下角
nums[n+1-i][n+1-j] = Math.min(i, j);//右下角
}
}
for (int i = 1;i <= n;i++){
for (int j = 1;j <= n;j++){
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
}
练习
- (一)读入一个正整数n,输出一个n行的数字三角形
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[][] nums = new int[10][10];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
//定义一个变量
int num = 1;
//赋值操作
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
nums[i][j] = num;
num++;
}
}
//使用一个二重循环,打印二维数组的每一个元素
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
}
- (二)已知一个n×n(2<=n<=20)的矩形(方阵),把矩阵二条对角线上的元素值加上10,然后输出这个新矩阵。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[][] nums = new int[21][21];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 1; i <= n; i++) {//行数
for (int j = 1; j <= n; j++) {
nums[i][j] = input.nextInt();//原来的值
if (i == j ||i + j == n + 1){
//现在i和j定位到的数字是对角线上的数字
nums[i][j] += 10;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
}
- (三)给定一个5×5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
//交换二维矩阵的两行
int[][] nums = new int[6][6];
Scanner input = new Scanner(System.in);
//给二维数组动态赋值
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
nums[i][j] = input.nextInt();
}
}
//n和m的值
int n = input.nextInt();
int m = input.nextInt();
for (int i = 1; i <= 5; i++) {//列数
int temp = nums[n][i];
nums[n][i] = nums[m][i];
nums[m][i] = temp;
}
//换位后的新内容
for (int i = 1; i <=5 ; i++) {
for (int j = 1; j <= 5; j++) {
System.out.print(nums[i][j] + "\t");
}
System.out.println();
}
}
}
- (四)输入两个n行m列的矩阵A和B,输出它们的和A+B。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[][] nums = new int[101][101];//第一个矩阵
int[][] numstwo = new int[101][101];//第二个矩阵
int[][] numsresult = new int[101][101];//最后矩阵
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
//将会输入两个矩阵,都是n行m列
//给第一个矩阵赋值
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
nums[i][j] = input.nextInt();
}
}
//给第二个矩阵赋值
for (int i = 1; i <= n; i++) {
for (int j = 1;j <= m;j++){
numstwo[i][j] = input.nextInt();
}
}
//
for (int i = 1; i <=n ; i++) {
for (int j = 1; j <= m; j++) {
numsresult[i][j] = nums[i][j] + numstwo[i][j];
}
}
for (int i = 1; i <=n ; i++) {
for (int j = 1; j <= m; j++) {
System.out.print(numsresult[i][j] +"\t" );
}
System.out.println();
}
}
}
- (五)输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。
- 思路
ps:图从老师视频上截取的。
import java.util.Scanner;
public class lian {
public static void main(String[] args) {
int[][] nums = new int[101][101];
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
//给n行m列的矩阵赋值
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
nums[i][j] = input.nextInt();
}
}
//旋转后的矩阵,相当于n和m互换,原来的n需要最大值向下回退
for (int i = 1; i <= m; i++) {
for (int j = n;j >= 1;j--){
System.out.print(nums[j][i] + "\t");
}
System.out.println();
}
}
}
ps:着实有些难度,真要弄懂的话建议找视频学习。
三.关于基本类型以及引用的类型
- 四类八种:基本类型
整型:int short
双精度浮点型:double float
布尔类型:boolean
字符型:char
- 引用类型:String 。数组
ps:基础类型只是在栈上占用空间,引用类型就是栈和堆都要占用空间。
四.笔记
- 回型方阵,我们可以将大的方阵打散成小的方阵,先观察小方阵如何解决,然后根据对称性解决其他小方阵。
五.Java基础总结
- 学习到这,Java基础已经讲完,接下来就会进入到Java面向对象的学习。
1.Java基础
- 面向对象之前
初识Java中
包含了 Java基础知识,Java开发环境和开发的步骤。用记事本开发第一个Java程序。后面使用了idea工具开发。
- 面向对象之后
初识Java(二)中
包含了变量(变量中的类型),常量以及运算符和表达式
初识Java(三)中
包含了分支语句总共5种 :if相关的四种类型(简单if、if - else、多重if、嵌套if) 以及switch选择结构。
初识Java(四)中
包含了循环结构:单层循环结构中的三大循环(for、while、do - while())break和continue关键字的区别。
初识Java(五)中
包含了二重循环:二重循环打印图形的思路:外层控制行数,内层控制图形符号数。每一行符号可能出现多种类型。内层循环不止一个,注意观察找出内层循环与外层循环的关系。
初识Java(六)中
包含了一维数组:数组可以批量保存类型相同的数据。下标从0开始,下标越界。下标最大值只能到nums.length-1。
数组会和循环结合,循环又会和分支结构结合。(综合运用)
初识Java(终章)中
包含了二维数组:多行多列的一种结构,处理的是数据矩形的数据以及迷宫和九宫格性质的问题。数组中的每一项又是一个一维数组。
Java程序的三大结构:顺序结构【++、--数据类型】,分支结构,循环结构。
- 面向对象后
后面的学习目标