配列ツール、2次元配列
レビュー
1.Idea的使用
2.数组的声明初始化方式
声明
int[] arr;
int arr[];//不推荐使用
初始化
2.1静态初始化
arr=new int[]{10,20,30};
int[] arr2=new int[]{3,4,5};
//简写 必须一条语句完成
int[] arr3={1,3,5};
2.2动态初始化
int[] arr4=new int[4];//创建数组,长度4,数组元素都是默认值 0
String[] arr5=new String[5]; //创建数组,长度5,数组元素都是默认值null
3.数组的使用(元素访问,元素修改,遍历)
3.1 访问元素 使用下标 ,下标范围 0 - 长度-1
3.2 获取长度 arr.length;
3.3 修改元素
arr[0]=10;
arr[1]=20;
arr[2]=30;
3.4 数组遍历
//for
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
//增强for ,缺点不能访问下标
for(int num:arr){
System.out.println(num);
}
注意:1 数组不要越界 ArrayIndexOutofBoundsException
2 数组一定要初始化 NullPointerException
3.5数组内存空间的分配
栈:存储基本类型数据和引用类型的地址 ,特点:先进后出 空间比较小,访问速度较快
堆:存储引用类型的实际数据,特点:空间比较大,访问速度较慢
int[] nums=new int[]{20,30,40};
nums 数组 栈 地址
{20,30,40}存放在堆中
4.数组的应用(排序和查找)
排序:
4.1 冒泡排序
N个数字来排列
两两比较小靠前
外层循环n-1
内层循环n-1-i
for(int i=0;i<nums.length-1;i++){
for(int j=0;j<nums.length-1-i;j++){
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
4.2 选择排序
N个数字来排列
选择一个来比较
外层循环n-1
内层循环小于n
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
优化
for(int i=0;i<nums.length-1;i++){
int k=i;
for(int j=i+1;j<nums.length;j++){
if(nums[k]>nums[j]){
k=j; //最小的数的下标
}
}
if(k!=i){
int temp=nums[k];
nums[k]=nums[i];
nums[i]=temp;
}
}
查找:
4.3 顺序查找
4.4 二分法查找
1 先排序
2 每次从中间开始,进行比较
int low=0;
int upper=nums.length-1;
while(low<=upper){
int middle=(low+upper)>>1;
if(nums[middle]>key){
upper=middle-1;
}else if(nums[middle]<key){
low=middle+1;
}else{
return middle;
}
}
return -1;
今日の内容
1.Arrays工具类
2.方法传参和返回值
3.可变参数
4.二维数组
1.1 二维数组的概念
1.2 二维数组的定义
1.3 数组的初始化
1.4 二维数组的访问
5.调试和文档注释
教育の目標
1.掌握Arrays工具类的使用
2.掌握方法传参和返回值
3.掌握可变参数的使用
4.掌握二维数组的初始化和遍历
5.掌握调试和文档注释
セクション配列ツール
使用帮助文档:
1.6
1.8
作用:主要用于对数组进行排序,查找,填充,比较等的操作
Arrays工具类存在于java.util包下,所以使用的第一步就是导包:import java.util.Arrays;
注意1:如果在同一个Java文件中同时使用Scanner和Arrays,则可以向如下方式导包:
import java.util.Scanner;
import java.util.Arrays;
或者简写为:* 所有的类
import java.util.*;
注意2:但凡是工具类,类中的方法全部是静态的,方便调用
调用语法:类名.方法名(实参列表)
コードの実装:
//演示Arrays工具类的使用
package com.qf.day07;
import java.util.Arrays;
/*
* Arrays工具类的使用
* 1 二分查找
* 2 排序
* 3 复制
* 4 填充
* 5 把数组转成字符串
*
*
*/
public class Demo1 {
public static void main(String[] args) {
// binarySearch();
//sort();
//copy();
//fill();
toStr();
}
//binarySearch 二分查找
public static void binarySearch() {
int[] arr=new int[] {5,8,10,20,65,100};
int result=Arrays.binarySearch(arr,22);
if(result>=0) {
System.out.println("找到了");
}else {
System.out.println("没找到 ");
}
}
//排序
public static void sort() {
int[] arr=new int[] {12,8,100,2,9};
Arrays.sort(arr);
System.out.println("排序之后:");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
//复制
public static void copy() {
int[] arr=new int[] {12,8,100,2,9};
int[] arr2=Arrays.copyOf(arr, arr.length);
for(int i=0;i<arr2.length;i++) {
System.out.println(arr2[i]);
}
}
//填充
public static void fill() {
int[] arr=new int[] {12,8,100,2,9};
Arrays.fill(arr, 10);
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
//把数组转成字符串
public static void toStr() {
int[] arr=new int[] {12,8,100,2,9};
String s=Arrays.toString(arr);
System.out.println(s);
}
}
第二の方法のパラメータ渡しと戻り値
そこパラメータ:参照方法(1)ノンパラメトリック法(2)
基づいて、戻り値はありません:(1)は戻り値は(2)の値を返しません
方法の種類として2.1基本パラメーター
ケース1:スワップ二つの数字
public class Demo2 {
public static void main(String[] args) {
int num1=10;
int num2=20;
swap(num1, num2);
System.out.println(num1);
System.out.println(num2);
}
public static void swap(int a,int b) {
System.out.println("交换之前: a:"+a+" b:"+b);
int temp=a;
a=b;
b=temp;
System.out.println("交换之后: a:"+a+" b:"+b);
}
}
方法として2.2参照パラメータタイプ
ケース2:配列のソートを実装
import java.util.Arrays;
/*
* 方法的参数传递和返回值
* 1 交换两个数字
* 2 实现数组排序
*
*/
public class Demo2 {
public static void main(String[] args) {
int[] nums=new int[] {15,8,3,9,20,50};
sort(nums);
//遍历nums
System.out.println("遍历nums");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i]+" ");
}
}
//2实现数组排序
public static void sort(int[] arr) {
//排序之前
System.out.println("排序之前");
System.out.println(Arrays.toString(arr));
//冒泡
for(int i=0;i<arr.length-1;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;
}
}
}
//排序之后
System.out.println("排序之后");
System.out.println(Arrays.toString(arr));
}
}
概要:Javaのパラメータがメソッドに渡しては伝統的な価値観の方法で使用されています。
実際のデータ送信の1の基本的なタイプ
図2は、送信アドレスの参照タイプであります
修正の基本的なタイプを通過した後、発信者への影響はありません。参照型を通過した後、発信者への影響を修正します。文字列とラッパークラスを除きます
メソッドの戻り値として2.3基本形
ケース3は、達成するための方法を記述し、1-100、その結果を返します
public class Demo3 {
public static void main(String[] args) {
int result=sum();
System.out.println(result);
}
public static int sum() {
//计算1-100的和
int sum=0;
for(int i=0;i<=100;i++) {
sum+=i;
}
return sum;
}
}
メソッドの戻り値として2.4参照型
ケース4:配列を返すメソッドを書きます
package com.qf.day07;
import java.util.Arrays;
/*
* 方法返回值
* 1 基本类型作为方法返回值
* 2 引用类型作为方法返回值
*/
public class Demo3 {
public static void main(String[] args) {
int[] nums2=getNums();
for(int i=0;i<nums2.length;i++) {
System.out.println(nums2[i]);
}
}
//把数组中的每个数字加5,再返回一个数组
public static int[] getNums() {
int[] arr=new int[] {5,10,15};
for(int i=0;i<arr.length;i++) {
arr[i]=arr[i]+5;
}
return arr;
}
}
概要:メソッドの戻り値がある場合は参照型は、アドレスが返された場合、実際のデータの基本型は、返されます。
特別:値と戻り値によって、文字列型や包装方法は、基本的なタイプに従います。
第三の可変パラメータ
可変長パラメータ
在调用方法时,方法的形参的个数是不确定的
语法
类型... 变量名称
例如:int... num
好处:不用创建数组,直接写数组元素
コードの実装:
package com.qf.day07;
/*
* 可变参数
* int...
* 好处:不用创建数组,直接写数组元素
* 注意事项:
* 1 一个方法只能有一个可变参数
* 2 可变参数只能方法参数列表最后
*/
public class Demo4 {
public static void main(String[] args) {
//调用
//int[] nums= {10,4,8,20};
//sort(nums);
sort(10,4,8,20,1,2); //实际运行是,把这些数据变成数组
}
public static void sort(int a,int... arr) {
for(int i=0;i<arr.length-1;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;
}
}
}
}
}
注:
。A配列として処理するために使用される可変長パラメータを行う場合
B。1つの変数のみのパラメータの方法
C。変数パラメータメソッドのパラメータリストのみ最後に
セクションIV二次元配列
二次元アレイの4.1概念
本质上还是一个一维数组,只是其数组元素又是一个一维数组
举例说明:变量,一维数组,二维数组之间的关系
吸烟:
没钱 1根 一个变量
稍微有钱 一包 一维数组【20根】
有钱 一条 二维数组【10包】
4.2定義された二次元アレイ
方式一:元素类型[][] 数组名称;
方式二:元素类型 数组名称[][];
推荐使用方式一
4.3配列の初期化
静态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[][]{{一维数组1,一维数组2,一维数组3....};
简化:元素类型[][] 数组名称 =m{{一维数组1,一维数组2,一维数组3....};
举例:int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};
动态初始化:
语法:元素类型[][] 数组名称 = new 元素类型[二维数组的长度][一维数组的长度]
举例:int[][] arr = new int[3][4];
说明:定义一个数组arr,二维数组中一维数组的个数为3个,每个一维数组中元素的个数为4个
アクセスの4.4二次元アレイ
二次元のインデックス付きアクセスの要素を指定して
class TwiceArrayDemo01
{
public static void main(String[] args)
{
int[][] arr = new int[3][4];
System.out.println(arr);//[[I@15db9742
System.out.println(arr.length);//3
System.out.println(arr[0]);//[I@6d06d69c
System.out.println(arr[0].length);//4
System.out.println(Arrays.toString(arr));//[[I@6d06d69c, [I@7852e922, [I@4e25154f]
System.out.println(Arrays.toString(arr[0]));//[0, 0, 0, 0]
/*
[[I@15db9742
3
[I@6d06d69c
4
[[I@6d06d69c, [I@7852e922, [I@4e25154f]
[0, 0, 0, 0]
*/
}
}
二次元配列トラバーサル
//常见的操作:遍历二维数组
class TwiceArrayDemo02
{
public static void main(String[] args)
{
//如果二维数组中一维数组的元素个数不确定
//int[][] arr = new int[3][];
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
//给arr[0]中的第0个元素修改值
arr[0][0] = 10;
//遍历arr[0]
for(int i = 0;i < arr[0].length;i++) {
System.out.println(arr[0][i]);
}
//二维数组的遍历:嵌套for循环
//简单for循环
for(int i = 0;i < arr.length;i++) {
int[] subArr = arr[i];
for(int j = 0;j < subArr.length;j++) {
System.out.println(subArr[j]);
}
}
//增强for循环
for(int[] subArr1:arr) {
for(int n:subArr1) {
System.out.println(n);
}
}
}
}
マシン演習:クラスが2つのコース、5人の学生、2次元配列は、各コースの結果を保持しているがあり、総得点と各コースの平均スコアを計算します
public static void main(String[] args) {
double[][] scores=new double[2][5];
Scanner input=new Scanner(System.in);
for(int i=0;i<scores.length;i++) {
for(int j=0;j<scores[i].length;j++) {
System.out.println("请输入第"+(i+1)+"门课,第"+(j+1)+"个学生的成绩");
scores[i][j]=input.nextDouble();
}
}
System.out.println("----------------------------");
for(int i=0;i<scores.length;i++) {
double sum=0;
for(int j=0;j<scores[i].length;j++) {
sum+=scores[i][j];
}
System.out.println("第"+(i+1)+"门课的总分是:"+sum);
System.out.println("第"+(i+1)+"门课的平均分是:"+(sum/5));
}
}
メモリの4.5二次元アレイ
public static void main(String[] args) {
int[][] nums={{10,20,30},{40,50,60}};
int[][] nums2={{1,2},{3,4},{5,6}};
int[][] nums3=new int[3][2];
int[][] nums4=new int[2][];
}
分析を描きます:
セクションV:トラブルシューティングのヒント
発見し、問題を解決するために、開発者はプログラムの実行のプロセスを理解するためのデバッグ手法を使用してください。
日食デバッガを使用して、2つの手順が必要です。
1ブレークポイントを追加します。
2つのステップ:
ショートカット:ステップインF5工程へ
F6ステップオーバーステップオーバー
F7ステップリターンステップリターン
F8は、再開を続行します
ビュー変数ウィンドウ、ブレークポイントウィンドウ
使用アイデアデバッガはまた、2つの手順が必要です。
1ブレークポイントを追加します。
2つのステップ:
* 快捷键 * F8 step over 单步跳过 * F7 step into 单步进入 * Alt+Shift + F7 强制单步进入,进入其他的类库
セクションVI:ドキュメントのコメント
コメントでのJava
- 単一行はコメント://これは1行コメントです
- マルチラインのコメント:/ *これは複数行のコメントです、
** / *複数行することができ
JavaDoc注:クラスに注釈を付けるために使用され、属性とメソッド
使用语法 /** .....*/
JavaDocの一般的に使用されたタグ
タグ | 意味 | タグ | 意味 |
---|---|---|---|
@著者 | 著者は、たとえば@author wgyのために、クラスを識別する | @バージョン | 指定されたクラスのバージョン |
@見る | リンクや参照の内容を指定します | @param | メソッドのパラメータの説明 |
@since | マークJDK1.2以降の特定の変動、@ | @return | 戻り値の型説明 |
/**
* 学校类
* @author wgy
* @version 2.0 2018/03/20
*/
public class School {
/**
*学校名称
*/
String schoolName;
/**
* 招生方法
* @return total
*/
public void drawStudent() {
System.out.println(schoolName+"开始招生...");
}
//...
}
ドキュメントには、影響をコメント:
コードを記述するメッセージが表示されたらdocコメントは、1で表示することができます
2.JavaDoc注釈ツールがサポートするAPIのヘルプドキュメントを形成するために、ソースコードからクラスなど、属性、メソッドを抽出することができます。
デモ1:Eclipseや発想ヘルプドキュメント。UTF-8 -charsetのUTF-8 -encodingその符号化に注意してください
演示2:javadocの-d DOC - コードUTF-8 -charset UTF-8 \ COM \ SRC QF \ day23_3 \ Person.java
概要
1つの配列のユーティリティクラスを使用します
binarySearch()//バイナリ検索
ソート(); //ソート
copyOf(); //配列をコピーします
copyOfRange();
充填; //塗りつぶし()
toString(); //フォームに文字列配列に入れ
方法2のパラメータ渡しと戻り値
値によって渡されたパラメータを使用する方法:アドレスの基本的な種類を通過し、実際のデータ参照タイプを送信します
この方法は、データベースは、実際の型、参照型のリターンアドレスを返し、値2、戻りデータを返します。
3-Dアレイは、実際には1次元配列で構成され、配列の各要素は、一次元アレイです。
ステートメント4二次元アレイ、初期化、アクセス(インデックスアクセスを介して、トラバース)
int[][] arr=new int[][]{{10,20},{30,40}}
5つのトラブルシューティングのヒント
1ブレークポイントを追加します
F8の中へF5 F6ステップオーバー2シングルステップステップは、CTRL + F12をデバッグ終了し続けて
6件のドキュメントのコメント
ヘルプの開発者は、APIドキュメントを生成します
書き取り
根据下面要求完成题目:
1.分别使用静态初始化和动态初始化的方式定义一个数组
2.对静态初始化的数组分别使用冒泡和选择进行排序,其中,冒泡实现升序,选择实现降序
3.使用for循环和foreach遍历排好序的数组
仕事
1.班上有3个学生,每个学生都参加了三门功课的考试,其中第二个学生是特长生,上级要求给他每门功课都+5.【要求:使用二维数组做,并且分别使用for循环和增强for循环遍历二维数组】
2.求一个3*3矩阵对角线元素之和
10 20 30
8 6 7
20 25 50
インタビューの質問
1.二维数数组在内存中的存储方式是怎样的?