Java笔记:二维数组,按指定字符长度输出的方法,哈希集合
2026/9/4 7:23:40 网站建设 项目流程

概述

本文旨在记录 Java代码初学者的学习历程并表达本人对代码的理解。
本文的内容包括:二维数组的基本知识,哈希集合(HashSet)的基本知识
本文涉及到的题目:
https://www.luogu.com.cn/problem/P5731
https://www.luogu.com.cn/problem/P2141

1.二维数组

二维数组可以理解为表格形式,储存数据的单元有行和列两个属性,行和列两个索引可以定位一个单元。其分布如下:

横向为二维,即列数,竖向为一维,即行数。

定义二维数组的方法:
数据类型[ ][ ] 数组名=new 数据类型[一维长度][二维长度];
取数据与存数据方法与一维数组一致。
接下来完成题目

我采用变量up,down,left,right控制填入数组的位置,用变量a控制填入数组的数字。采用while循环控制多次换方向填入。

public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[][] TDArray=new int[n][n]; int left=0,right=n-1,up=0,down=n-1; int a=1; while(left<=right) { for (int i = left; i <=right; i++) { TDArray[up][i] = a; a++; } up++; for (int i = up; i <= down; i++) { TDArray[i][right] = a; a++; } right--; for (int i = right; i >= left; i--) { TDArray[down][i] = a; a++; } down--; for (int i = down; i >= up; i--) { TDArray[i][left] = a; a++; } left++; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.printf("%3d",TDArray[i][j]); } System.out.println(); } } }

System.out.printf(“%3d”,TDArray[i][j]);"%3d"是“格式模板”,它是一个字符串(String),%是格式说明符的起始标志,3表示输出内容最少占用3个字符长度,d叫转换符,代表输出内容为整型。输出默认右对齐,写为%-3d可为左对齐。

2.哈希集合

哈希集合大概可以理解为我们在高中数学中学习的集合概念。哈希集合中没有重复元素,元素没有顺序,因此无法从哈希集合中提取到某一个数据。
定义哈希集合和哈希集合的常用方法:

HashSet<Integer> set1 = new HashSet<>(a); 即定义一个能装整数数据,名为set1,能装a个元素的哈希集合。 第一个<>中只能是类或接口。 set1.add(b); 即将b添加到set1中。若添加成功会返回true,若失败,返回false。 for(Integer x:set1){ System.out.println(x); } 即遍历输出set1中所有的元素(无顺序)。 boolean isExist = set1.contains(5); 查询set1中是否存在5,若存在,返回true。 set1.remove(5); 从set1中移除5。

我们将完成的题目如下:

我采用一维数组和哈希集合结合的方式解决它。首先,我们将数据输入一维数组和哈希集合。随后用嵌套双循环计算出两个输入数据所有可能的和(不重复,即计算过1+2就不会计算2+1),每计算出一个和就查询它是否存在于哈希集合,若存在,就移除它,最后用最开始哈希集合的元素数量减去后来哈希集合的元素数量,就能得到被移除的元素的数量,即我们所要求的答案。
以上为逻辑,以下为代码:

import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int num=0; int[] arr = new int[a]; HashSet<Integer> set1 = new HashSet<>(a); for (int i = 0; i < a; i++) { int b = sc.nextInt(); set1.add(b); arr[i]=b; } for (int i = 0; i < a; i++) { int x1=arr[i]; for (int j = i+1; j < a; j++) { int y1=arr[j]; int p=arr[j]+arr[i]; boolean b1=set1.contains(p); if(b1==true){ set1.remove(p); } } } int count = set1.size(); int ans=a-count; System.out.print(ans); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询