黑马程序员Java初级<四>---> 数组

本文详细介绍了数组的基本概念、声明方式及初始化方法,包括一维数组和多维数组的使用技巧。同时,深入探讨了数组的排序、查找等常见操作,并提供了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述:

1、定义:数组是一种数据结构,用来存储同一类型值的集合。简单来说,就是一个存放同种类型的容器。

2、使用数组的好处:数组可将其中的每一个值自动添加对应的编号,每一个值称为一个元素,元素从0开始编号,方便对每个元素的管理。

二、格式:

1、格式一:

数据元素类型[]  变量名  =  new 元素类型[参数];      说明:参数表示数组中元素的个数。

如:int[] a = new int[10];

内存分配情况如图:


2、格式二:

元素类型[] 变量名 = new 元素类型[]{元素1,元素2,......}; 

如:int[] a = new int[10]{0,1,2,3,4,5,6,7,8,9};

三、数组赋值:

1、数组的初始化:

1)对于上面两种格式的赋值:

      第一种是隐式初始化,每个元素的值都为相对应的各类型的初始化值,具体看数据类型的总结。

      第二种是显式初始化,每个元素都已经被赋予初值。

2)还可以定义匿名数组:

      new int[]{3,2,6,7,9,1,4}

2、数组的间的赋值:

java中,可以将一个数组的变量的引用值赋给另一个数组的变量。如:String[] b = a;

具体见图示:


四、多维数组:也称数组中的数组

这里主要总结一下二维数组:

1、格式:

1)格式一:int[][] arr = new int[2][3];

定义了一个名为arr的数组,数组中有2个一维数组,每个一维数组中含有3个元素。

可以对其赋值:arr[0][0] = 3;即对第一个一位数组的第一个元素赋值。


2)格式二:int[][] arr = new int[3][];

此二维数组中含有3个一维数组,每个一维数组的默认初始化值都为null,每个一维数组中的元素值都为0;可对每个元素赋值,如:

       arr[0] = new int[3];

       arr[1] = new int[2];

       arr[2] = new int[1];


3)格式三:

显式初始化二维数组:int[][] arr = {{1,5,7},{4,8},{3,9,20,12}}

2、数组长度:

以格式二为例:

a.二维数组的长度:arr.length//为3

b.二维数组中的第一维数组的长度:arr[0].length//为3


五、数组的排序与查找:

1、获取最大值:

/**需求:获取数组中的最大值
思路:将数组中的元素进行从小到大(或从大到小)的排列,然后取第一个元素为最小值,取最后一个值为最大值
步骤:
	1创建类ArrayTextMax
	2创建一个数组并赋值
	3用for循环对其进行排序,
	4打印排序后的数组的第一个元素和最后一个元素
*/

class ArrayTextMax
{
	//定义功能:在数组中取最大值
	public static int getMax(int[] arry)
	{
		int max = arry[0];
		for (int i=0;i<arry.length;i++)
		{
			//用第一个元素的值和后面的比较,大则换值
			if (max<arry[i])
			{
				max = arry[i];
			}
		}
		return max;
	}

	public static void main(String [] args)
	{
		int[] arr = {5,2,4,8,6,1,9};
		int max = getMax(arr);//只是获取最大值的方法
		System.out.println("getMax方法:arr数组中最大值为;" + max);
	}
}

2、数组的排序:(选择排序、冒泡排序以及java中的排序方法)

/*
定义功能:
获取最大值,先用第一个值和每一个比较,
再用第二个值和后面的值比较,将小的放前面
*/
import java.util.*;
class ArrayText
{
	//第一种排序方法:选择排序
	public static void getPaixu0(int[] arry)
	{
		for (int j=0;j<arry.length;j++)
		{
			//i=j,每比较一轮就减少一个数,比较后,再用第二个数获得后面的最小值
			for (int i=j+1;i<arry.length;i++)
			{
				//换值
				if (arry[j]>arry[i])
				{
					int temp = 0;
					temp = arry[j];
					arry[j] = arry[i];
					arry[i] = temp;
				}
			}
		}
	}

	//第二种排序方法:冒泡排序--相邻的两个元素比较
	public static void getPaixu(int[] arr)
	{
		for (int j=0;j<arr.length*arr.length;j++)
		{
			for (int i=1;i<arr.length;i++)//设置为1是为了防止越界
			{
				if (arr[i-1]>arr[i])//若改成<是从大到小排序
				{
					int temp = 0;
					temp = arr[i-1];
					arr[i-1] = arr[i];
					arr[i] = temp;
				}
			}
		}
	}

	public static void main(String [] args)
	{
		int[] arr0 = {5,2,4,8,6,1,9};
		System.out.println("arr数组排序前:\n"+ Arrays.toString(arr0));
		System.out.println();
		int[] arr1 = {5,2,4,8,6,1,9};
		getPaixu0(arr1);//第一种排序方法
		System.out.println("选择排序方法:arr数组排序后:\n"+ Arrays.toString(arr1));//打印排序后的数组
		System.out.println();
		int[] arr2 = {5,2,4,8,6,1,9};
		Arrays.sort(arr2);//java中自带的排序函数
		System.out.println("java中自带的排序函数sort:arr数组排序后:\n"+Arrays.toString(arr2));
		System.out.println();
		int[] arr3 = {5,2,4,8,6,1,9};
		getPaixu(arr3);//第二种排序方法
		System.out.println("冒泡排序方法:arr数组排序后:\n"+ Arrays.toString(arr3));
		System.out.println();
		System.out.println("arr数组中最小值为;" + arr3[0]);
		System.out.println("arr数组中最大值为:" + arr3[arr3.length-1]);
	}
}

3、数组中元素的查找:

/**需求|:查找数组中的元素
思路|:遍历数组中的元素,并与要查找的内容比较,相同,则返回脚标
步骤
	1创建类FindArry
	2用for遍历数组,如果查找到相同内容,记录脚标并返回
	3如果未找到,就返回-1

	如果要在一个有序数组中插入一个数,之后仍有序
	就是先查找数组,用折中法:如果查找到有此数,则返回的中间值就是插入的地方,否则将返回的-1改成返回min,即为插入的地方
	如:{1, 2, 3, 5, 6, 8, 11, 13}插入8,返回mid = 5;插入后为{1, 2, 3, 5, 6, 8, 8, 11, 13}
	插入10,返回min = 6,插入后为{1, 2, 3, 5, 6, 8, 10, 11, 13}
*/

import java.util.*;
class FindArry
{
	//方法一:遍历每一个元素查找
	public static int findarr(int[] arr,int key)
	{
		for(int i=0;i<arr.length;i++)
		{
			if(arr[i] == key)
			{
				return i;
			}
		}
		return -1;
	}

	//方法二:折半,前提是数组是按大小顺序排列好的,
	//用查找的值和中间值比较,大则和下一半中间值比依次,小则和上一半中间值比,找到则返回。
	//        小值的编号在左移或大值的编号在右移。要判断是否大小值的编号相遇,仍若未找到,则不再循环,返回-1
	public static int FindArry1(int[] arr,int key)
	{
		int min,max,mid;
		min = 0;
		max = arr.length-1;
		mid = (min + max)/2;
		
		//循环,查找中间值与要查找的值比较
		while(key != arr[mid])
		{
			if (key > arr[mid])
				min = mid +1;
			else 
				max = mid - 1;
			if (min > max)
				return -1;
			mid = (min + max)/2;
		}
		return mid;
	}

	//方法三:折半第二种
	//while的条件改变
	public static int FindArry2(int[] arr,int key)
	{
		int min,max,mid;
		min = 0;
		max = arr.length-1;
		
		
		//循环,查找中间值与要查找的值比较
		while(min <= max)
		{
			mid = (min + max)>>1;
			if (key > arr[mid])
				min = mid +1;
			else if(key<arr[mid])
				max = mid - 1;
			else
				return mid;
		}
		return -1;
	}

	public static void main(String [] args)
	{
		int[] arr = {1,6,11,2,8,5,3,13};
		int m = findarr(arr,3);
		System.out.println("m=" + m);
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		int x = FindArry1(arr,13);
		int y = FindArry2(arr,25);
		System.out.println("查找13的结果x=" + x + "\n查找25的结果y=" + y);
	}
}


一、实验步骤 1、创建maven web项目或者模块,导入相关软件的依赖包。 2、进行tomcat的相关配置。 3、在数据库mybatis中创建book表,并插入一条数据,sql语句如下: USE mybatis; CREATE TABLE `tb_book` ( `id` int(11) , `name` varchar(32) , `press` varchar(32) , `author` varchar(32) ); INSERT INTO `tb_book` VALUES (1, 'Java EE企业级应用开发教程', '人民邮电出版社', '黑马程序员'); 4、在src/main/java里创建com包,在里面创建itheima子包,在itheima包中分别创建controller,service,dao和domain包。 5、在domain包下创建名称为Book的实体类。代码如下: public class Book { private Integer id; //图书id private String name; //图书名称 private String press; //出版社 private String author; //作者 //getter和setter方法自行补充 @Override public String toString() { return super.toString(); } } 6、在dao包下创建接口BookMapper,里面创建一个根据id查询图书信息的方法,代码如下: public interface BookMapper { public Book findBookById(Integer id); } 7、在src/main/resources文件夹中,创建多级文件夹com/itheima/dao,在dao文件夹下,创建映射文件BookMapper.xml,记录与findBookById对应的sql语句。 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.dao.BookMapper"> <!--根据id查询图书信息 --> <select id="findBookById" parameterType="int" resultType="com.itheima.domain.Book"> select * from tb_book where id = #{id} </select> </mapper> 8、在service包里创建BookService接口,在BookService接口中定义findBookById()方法,通过id获取对应的Book信息。代码如下: public interface BookService { public Book findBookById(Integer id); } 9、在service包中创建子包impl,在ipml包中创建BookServiceImpl类,BookServiceImpl类实现BookService接口的findBookById()方法,并在类中注入一个BookMapper对象。findBookById()方法通过注入的BookMapper对象调用findBookById()方法,根据id查询对应的图书信息。代码如下: public class BookServiceImpl implements BookService { @Autowired private BookMapper bookMapper; public Book findBookById(Integer id) { return bookMapper.findBookById(id); } } 10、在controller包中创建BookController类,在BookController类中注入一个BookService对象,并且定义一个名称为findBookById()的方法。findBookById()方法获取传递过来的图书id,并将图书id作为参数传递给BookService对象调用的findBookById()方法。代码如下: @Controller public class BookController { @Autowired private BookService bookService; @RequestMapping("/book") public ModelAndView findBookById(Integer id) { Book book = bookService.findBookById(id); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("book"); modelAndView.addObject("book", book); return modelAndView; } } 11、在resources文件夹中创建jdbc.properties,作为数据库连接配置文件,代码如下: jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true\ &characterEncoding=utf-8&serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=root 12、在resources文件夹中创建Spring的配置文件application-dao.xml文件,用于扫描包,引入数据库连接配置文件,配置Spring和MyBatis的整合信息(包括SqlSessionFactoryBean类和MapperScannerConfigurer的配置)。代码如下: <!--开启注解扫描, 扫描包--> <context:component-scan base-package="com.itheima.service"/> <!--引入属性文件--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--数据源--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--创建SqlSessionFactory对象--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--数据源--> <property name="dataSource" ref="dataSource"/> </bean> <!--扫描Dao包,创建动态代理对象,会自动存储到spring IOC容器中--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--指定要扫描的dao的包--> <property name="basePackage" value="com.itheima.dao"/> </bean> 13、在src/test/java目录下,创建名称为BookTest的测试类,用于对Spring和MyBatis的整合进行测试。用上@RunWith和@ContextConfiguration注解,代码如下,对此方法进行测试,成功打印出书籍信息即可证明Spring和MyBatis整合成功。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations ="classpath:application-dao.xml") public class BookTest { @Autowired private BookService bookService; @Test public void findBookById() { Book book = bookService.findBookById(1); System.out.println("图书id:" + book.getId()); System.out.println("图书名称:" + book.getName()); System.out.println("作者:" + book.getAuthor()); System.out.println("出版社:" + book.getPress()); } } 14、下面对Spring和SpringMVC进行整合。在resources目录下创建Spring MVC的配置文件spring-mvc.xml,负责扫描controller层以及配置视图解析器。代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置要扫描的包 --> <context:component-scan base-package="com.itheima.controller"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="suffix" value=".jsp"/> </bean> <!-- 配置默认Servlet,处理静态资源 --> <mvc:default-servlet-handler/> <!-- 配置注解驱动 --> <mvc:annotation-driven/> </beans> 15、在项目的web.xml中配置Spring的监听器ContextLoaderListener来加载Spring容器及Spring的配置文件,具体配置如下所示: <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application-*.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 16、接着在web.xml中配置SpringMVC的前端控制器,并在初始化前端控制器时加载Spring MVC的的配置文件spring-mvc.xml。代码如下: <!--Spring MVC 前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <!--初始化参数--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <!--项目启动时候,初始化前端控制器--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> 17、在webapp目录下创建book.jsp,代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head><title>图书信息查询</title></head> <body> <table border="1"> <tr> <th>图书id</th> <th>图书名称</th> <th>出版社</th> <th>作者</th> </tr> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.press}</td> <td>${book.author}</td> </tr> </table> </body> </html> 18、运行项目,在浏览器地址栏中输入http://localhost/book?id=1来进行图书查询。如果能顺利访问,表示SSM整合成功(如果你端口不是80的话,访问url得加上端口)。 用idea按照以上流程,详细的列出每一步的步骤,教会小白。
最新发布
06-07
<think>嗯,用户想详细列出使用IDEA进行SSM框架整合的每一步骤,这是个非常具体的教程类需求。用户明确要求包括从创建项目到最终运行的全流程,还特别强调要帮助新手理解,说明用户可能是刚接触SSM框架的开发者。从引用内容看,用户提供了几个关键代码片段作为参考,其中引用[1][2]展示Controller层的依赖注入和请求映射,引用[3]是Spring相关依赖的Maven配置,引用[4][5]涉及log4j和Maven配置。这些引用都是SSM整合的核心要素,需要融入教程中。用户真正需要的是一个零基础的保姆级指南。考虑到新手可能遇到的痛点,比如依赖冲突、配置文件路径错误、注解漏写等常见问题,教程应该包含:1)每个步骤的详细截图位置说明;2)关键配置项的注意事项;3)可能出现错误的解决方案。特别是MyBatis的SQLSessionFactoryBean配置和SpringMVC的视图解析器,这些容易出错的地方要重点标注。关于技术细节:数据库表设计部分可以以用户管理为示例,保持简单;事务管理要提到@Transactional注解的用法;单元测试部分可以建议用SpringJUnit4ClassRunner。最后的项目验证环节特别重要,应该设计清晰的测试路径,比如通过URL访问返回JSON数据,这样能直观验证各层是否连通。对了,用户要求完整流程说明,意味着要严格按开发顺序织内容:创建Maven项目→配置pom.xml→搭建基础包结构→配置web.xml→Spring/SpringMVC/MyBatis独立配置→各层代码编写→整合配置→部署测试。这种线性结构最符合新手认知逻辑。最后生成的三个相关问题很有针对性,尤其是事务管理那个问题,很多教程都会忽略这个重点。用户如果跟着做完基础整合,下一步自然会产生这些进阶疑问。</think> 以下是在IntelliJ IDEA中整合SSM框架的完整流程说明,以**创建账户管理系统**为例,逐步指导新手完成项目搭建: --- ### **步骤1:创建Maven项目** 1. **File → New → Project** - 选择 `Maven` → 勾选 `Create from archetype` → 选择 `maven-archetype-webapp` 2. 填写 `GroupId`(如 `com.example`)、`ArtifactId`(如 `ssm-demo`) 3. 配置Maven: - 引用[5]:在 `settings.xml` 中配置阿里云镜像和JDK1.8编译环境 --- ### **步骤2:配置pom.xml依赖** ```xml <!-- Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- MyBatis整合Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <!-- 其他依赖 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` > **注意**:Spring版本需保持一致(参考引用[3]) --- ### **步骤3:目录结构调整** ``` src ├── main │ ├── java │ │ └── com/example │ │ ├── controller # Controller层 │ │ ├── service # Service接口及实现 │ │ ├── dao # Mapper接口 │ │ └── entity # 实体类 │ ├── resources │ │ ├── spring # Spring配置 │ │ ├── mybatis # MyBatis映射文件 │ │ └── jdbc.properties # 数据库配置 │ └── webapp │ ├── WEB-INF │ │ └── web.xml # 核心配置 │ └── views # JSP页面 ``` --- ### **步骤4:配置核心文件** **1. web.xml**(加载Spring容器) ```xml <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> </servlet> ``` **2. Spring整合MyBatis配置** (`applicationContext-dao.xml`) ```xml <!-- 数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="jdbc:mysql://localhost:3306/ssm_db?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!-- SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:mybatis/*Mapper.xml"/> </bean> <!-- Mapper扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.dao"/> </bean> ``` **3. SpringMVC配置** (`spring-mvc.xml`) ```xml <!-- 扫描Controller --> <context:component-scan base-package="com.example.controller"/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> ``` --- ### **步骤5:代码开发** **1. 实体类** (`Account.java`) ```java package com.example.entity; public class Account { private Integer id; private String name; private Double balance; // Getters & Setters } ``` **2. Mapper接口** (`AccountMapper.java`) ```java public interface AccountMapper { List<Account> findAll(); } ``` **3. Mapper映射文件** (`AccountMapper.xml`) ```xml <mapper namespace="com.example.dao.AccountMapper"> <select id="findAll" resultType="Account"> SELECT * FROM account </select> </mapper> ``` **4. Service层** (`AccountServiceImpl.java`) ```java @Service public class AccountServiceImpl implements AccountService { @Autowired private AccountMapper accountMapper; public List<Account> findAll() { return accountMapper.findAll(); } } ``` **5. Controller层**(参考引用[1]) ```java @Controller @RequestMapping("/account") public class AccountController { @Autowired private AccountService accountService; @RequestMapping("/findAll") public String findAll(Model model) { model.addAttribute("accounts", accountService.findAll()); return "accountList"; // 对应 views/accountList.jsp } } ``` --- ### **步骤6:整合配置验证** 1. **数据库表创建**: ```sql CREATE TABLE account (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), balance DOUBLE); ``` 2. **部署Tomcat**: - **Edit Configurations** → **+** → 选择 `Tomcat Server` - 配置 `Deployment` 添加项目war包 3. **启动项目**:访问 `http://localhost:8080/account/findAll` - 若看到账户列表页面,则整合成功 --- ### **常见问题排查** - **依赖冲突**:用 `mvn dependency:tree` 检查依赖 - **注解失效**:确保 `<context:component-scan>` 包路径正确 - **SQL异常**:检查MyBatis映射文件路径和数据库连接参数 - **404错误**:确认JSP文件在 `/WEB-INF/views/` 目录下 > **关键点**:Spring容器(由 `ContextLoaderListener` 加载)管理Service和Dao层;SpringMVC容器(由 `DispatcherServlet` 加载)管理Controller层,两者通过父子容器关联。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值