从零开始的java开发1-2-5java综合案例:数组移位与统计

karshey      2022-05-20     436

关键词:

文章目录

综合案例需求

需求:定义一个类,对数组中的数据进行管理。
管理包括:

  • 插入9个数据
  • 显示所有数据
  • 在指定位置处插入数据
  • 查询能被3整除的数据

我们这里数组长度为10,第一步插入9个数据,然后预留一个位置给“在指定位置插入数据”。

方法:
插入数据:

public int[] insertData()

显示所有数据:

public void showData(int[]a,int n)

在指定位置处插入数据:

public void insertAtArray(int[]a,int n,int k);//k表示位置

查询能被3整除的数据:

public void divThree(int[]a)

从键盘接收数据:插入9个数据

代码1.0:

public int[] insertDate() 
		// 定义一个长度为10的数组,这里只插入9个数据
		int[] a = new int[10];
		// 要从键盘接收数据
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < a.length - 1; i++) 
			System.out.println("请输入第" + (i + 1) + "个数据");
			// 把从键盘接受的数据放到a[i]数组中
			a[i] = sc.nextInt();			
		
		return a;
	

这里我们对代码进行测试:如果我们输入1a,则会输出:

Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at t1/com.t1.dataManage.insertDate(dataManage.java:19)
	at t1/com.t1.dataManage.main(dataManage.java:31)

所以我们要把这种情况算进去, 当输入非数字时,sc.nextInt()语句会发生异常,执行catch后面的语句

try 
	a[i] = sc.nextInt();
	 catch (java.util.InputMismatchException e) 
		System.out.println("输入的格式有误,不能接受非数字");
	

得到代码2.0:

package com.t1;

import java.util.*;//Scanner类的包
public class dataManage 

	public int[] insertDate() 
		// 定义一个长度为10的数组,这里只插入9个数据
		int[] a = new int[10];
		// 要从键盘接收数据
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < a.length - 1; i++) 
			System.out.println("请输入第" + (i + 1) + "个数据");
			// 把从键盘接受的数据放到a[i]数组中
			try 
				a[i] = sc.nextInt();
			 catch (java.util.InputMismatchException e) 
				System.out.println("输入的格式有误,不能接受非数字");
			

		
		return a;
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		dataManage dataManage1 = new dataManage();
		int[] a = dataManage1.insertDate();
		for (int i : a) 
			System.out.print(i+" ");
		

	



输入:

a

输出:

请输入第1个数据
a
输入的格式有误,不能接受非数字
请输入第2个数据
输入的格式有误,不能接受非数字
请输入第3个数据
输入的格式有误,不能接受非数字
请输入第4个数据
输入的格式有误,不能接受非数字
请输入第5个数据
输入的格式有误,不能接受非数字
请输入第6个数据
输入的格式有误,不能接受非数字
请输入第7个数据
输入的格式有误,不能接受非数字
请输入第8个数据
输入的格式有误,不能接受非数字
请输入第9个数据
输入的格式有误,不能接受非数字
0 0 0 0 0 0 0 0 0 0 

显然又发生了错误,我们还要对代码进行改进。
错误原因:
第一次输入的a没有被接收,因为它不是整型。
那么在循环到了第二次时,这个a还是没有被接收,因为它不是整型…
这个a就没有被接收过,所以会一直报错。

改成:

try 
	a[i] = sc.nextInt();
	 catch (java.util.InputMismatchException e) 
	System.out.println("输入的格式有误,不能接受非数字");
	// 这里输入错误 但是要把它接收了
	sc.next();// 接收一个字符串
	

我们再对代码进行测试,输入:

a

输出:

请输入第1个数据
a
输入的格式有误,不能接受非数字
请输入第2个数据

显然又有问题,我们第一个数字的输入是错误的,然后就要输入第二个数字,跳过了第一个数字的输入。

改成:

try 
	a[i] = sc.nextInt();
	 catch (java.util.InputMismatchException e) 
	System.out.println("输入的格式有误,不能接受非数字");
	// 这里输入错误 但是要把它接收了
	sc.next();// 接受一个字符串
	i--;
	

测试一下:

请输入第1个数据
a
输入的格式有误,不能接受非数字
请输入第1个数据
a
输入的格式有误,不能接受非数字
请输入第1个数据
1
请输入第2个数据

这下就对了。

这个函数的总体代码:

public int[] insertDate() 
		// 定义一个长度为10的数组,这里只插入9个数据
		int[] a = new int[10];
		// 要从键盘接收数据
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < a.length - 1; i++) 
			System.out.println("请输入第" + (i + 1) + "个数据");
			// 把从键盘接受的数据放到a[i]数组中
			try 
				a[i] = sc.nextInt();
			 catch (java.util.InputMismatchException e) 
				System.out.println("输入的格式有误,不能接受非数字");
				// 这里输入错误 但是要把它接收了
				sc.next();// 接受一个字符串
				i--;
			

		
		return a;
	

数组元素的显示

代码:

/**
	 * 显示数组中元素的内容
	 * 
	 * @param a:数组名
	 * @param n:数组长度
	 */
	public void showData(int[] a, int n) 
		for (int i = 0; i < n; i++) 
			System.out.print(a[i] + " ");
		
		System.out.println();
	

在指定位置插入数据

/**
	 * 从键盘接收一个数据插入到数组的指定位置处
	 * 
	 * @param a:要插入数据的数组
	 * @param n:要插入的数据
	 * @param k:要插入的位置,从0开始
	 */
	public void insertAtArray(int[] a, int n, int k) 
		// 从0开始,所以最后一个元素的下标是a.length-1
		for (int i = a.length - 1; i > k; i--) 
			a[i] = a[i - 1];
		
		a[k] = n;
	

查询能被3整除的数组元素

/**
	 * 输出能被3整除的数组元素
	 * 
	 * @param a:数组
	 */
	public void divThree(int[] a) 
		String str = "";
		int count = 0;
		for (int i : a) 
			if (i % 3 == 0) 
				str = str + i + " ";
				count++;
			
		
		if (count == 0) 
			System.out.println("没有能被3整除的元素!");
		 else 
			System.out.println("能被3整除的元素为:" + str);
		
	

整体代码:

package com.t1;

import java.util.*;//Scanner类的包

/**
 * 从键盘接收整型数据存放在数组中,并对数组中的数据进行管理
 * 
 * @author karsh
 *
 */
public class dataManage 

	public int[] insertDate() 
		// 定义一个长度为10的数组,这里只插入9个数据
		int[] a = new int[10];
		// 要从键盘接收数据
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < a.length - 1; i++) 
			System.out.println("请输入第" + (i + 1) + "个数据");
			// 把从键盘接受的数据放到a[i]数组中
			try 
				a[i] = sc.nextInt();
			 catch (java.util.InputMismatchException e) 
				System.out.println("输入的格式有误,不能接受非数字");
				// 这里输入错误 但是要把它接收了
				sc.next();// 接受一个字符串
				i--;
			

		
		return a;
	

	/**
	 * 显示数组中元素的内容
	 * 
	 * @param a:数组名
	 * @param n:数组长度
	 */
	public void showData(int[] a, int n) 
		for (int i = 0; i < n; i++) 
			System.out.print(a[i] + " ");
		
		System.out.println();
	

	/**
	 * 从键盘接收一个数据插入到数组的指定位置处
	 * 
	 * @param a:要插入数据的数组
	 * @param n:要插入的数据
	 * @param k:要插入的位置,从0开始
	 */
	public void insertAtArray(int[] a, int n, int k) 
		// 从0开始,所以最后一个元素的下标是a.length-1
		for (int i = a.length - 1; i > k; i--) 
			a[i] = a[i - 1];
		
		a[k] = n;
	

	/**
	 * 输出能被3整除的数组元素
	 * 
	 * @param a:数组
	 */
	public void divThree(int[] a) 
		String str = "";
		int count = 0;
		for (int i : a) 
			if (i % 3 == 0) 
				str = str + i + " ";
				count++;
			
		
		if (count == 0) 
			System.out.println("没有能被3整除的元素!");
		 else 
			System.out.println("能被3整除的元素为:" + str);
		
	

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		dataManage dataManage1 = new dataManage();
		int[] a = dataManage1.insertDate();
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入要插入的元素:");
		int n=sc.nextInt();
		System.out.println("请输入要插入的位置:");
		int k=sc.nextInt();	
		dataManage1.insertAtArray(a, n, k);
		System.out.println("输出数组:");
		dataManage1.showData(a, a.length);
		dataManage1.divThree(a);
	


测试一下:
输入:

1 2 3 4 5 6 7 8 999
1000
1

输出:

请输入第1个数据
1
请输入第2个数据
2
请输入第3个数据
3
请输入第4个数据
4
请输入第5个数据
5
请输入第6个数据
6
请输入第7个数据
7
请输入第8个数据
8
请输入第9个数据
999
请输入要插入的元素:
1000
请输入要插入的位置:
1
输出数组:
1 1000 2 3 4 5 6 7 8 999 
能被3整除的元素为:3 6 999 

提示信息的方法

代码:

/**
	 * 提示信息
	 */
	public void notice() 
		System.out.println("************************************************");
		System.out.println("           1-插入数据");
		System.out.println("           2-显示所有数据");
		System.out.println("           3-在指定位置处插入数据");
		System.out.println("           4-查询能被3整除的数组元素");
		System.out.println("           0-退出");
		System.out.println("************************************************");
	

主方法

public static void main(String[] args) 
		// TODO Auto-generated method stub
		dataManage dataManage1 = new dataManage();
		Scanner sc = new Scanner(System.in);
		int input = 0;// 主方法中定义的变量都是局部变量,都要初始化
		int[] a = null;
		// 循环输入数字
		while (true) 
			dataManage1.notice();
			System.out.println("请输入对应的数字进行操作:");
			try 
				input = sc.nextInt();
			 catch (java.util.InputMismatchException e) 
				System.out.println("输入的格式有误,不能接受非数字");
				sc.next();
				continue;
			

			if (input == 0) 
				System.out.println("退出程序!");
				break;
			 else 
				switch (input) 
				case 1: 
					System.out.println("插入九个数据");
					a = dataManage1.insertDate();
					break;
				
				case 2: 
					System.out.println("显示数据");
					if (a == null) 
						System.out.println("数组为空!"查看详情  

从零开始的java开发1-6-1集合排序:对整型和字符串comparator接口comparable接口(代码片段)

文章目录数组的排序集合排序案例:对整型排序案例:对字符串进行排序Comparator接口案例:对宠物猫分别按名字升序、年龄降序进行排列Comparable接口案例:对商品价格进行降序排列总结数组的排序int[]arr=1,2,3,4... 查看详情

从零开始的java开发2-9-3油画商城静态网页案例(代码片段)

文章目录项目展示项目:0.准备工作1.页眉区的制作1-1.logo和menu位置的摆放1-2.menu功能的实现1-3.menu功能的样式1-4.登录与注册1-5.小结2.正文区的制作2-1.页眉和banner区2-2.商品展示区2-3.分页区2-4.小结3.页脚区的制作项目总结总体... 查看详情

如何从零开始学python

新手学Python可以按照以下步骤进行:1.按部就班敲代码在Python的学习教程中,在讲到相应的语法规则的时候,必定有相应的案例,Python新手应按部就班的敲一遍代码,切记不可直接抄写,而是默写,然后进行对比,及时发现错误... 查看详情

从零开始的java开发1-6-4java输入输出流:file类绝对路径和相对路径字节流缓冲流字符流对象序列化(代码片段)

文章目录概述File类File类的常用方法绝对路径和相对路径字节流概述文件输入流FileInputStream文件输出流FileOutputStream缓冲流概述案例:缓冲输入输出流字符流概述案例:字节字符转换流其他字符流对象序列化概述流就是指... 查看详情

从零开始的java开发2-9-2案例:仿windows计算器(代码片段)

文章目录需求与准备准备事件的两种添加方法计算机面板步骤一:一个大概步骤二:写上value步骤三:文本框步骤四:单击按钮使文本框显示数字步骤五:单击按钮使文本框显示数字的优化1步骤六:单击按... 查看详情

私塾在线java设计模式综合项目实战

...的水平和基本的设计能力。技术要点:用一个实际应用,从零开始,采用重构的方式,一步一步教你去应用各个设计模式,并完美的把这些设计模式细致、贴切的组合起来,构建一个精致的架构,开放、灵活而又非常小巧。整体... 查看详情

java开发从零开始!java游戏服务器开发教程

阶段一:筑基Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。内容包括:Java概述、Java基本语法、Ja... 查看详情

如何从零开始设计智能硬件

如何开始从零设计智能硬件,一定需要看这个训练营。HaaS智能硬件开发训练营和以往所有的硬件训练营都不同。 1.他会介绍一款智能硬件从一个初始想法到最终成品的全流程,包括硬件设计,生产,测试,软... 查看详情

关东升的《从零开始学swift》3月9日已经上架

     大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5部分,包括Swif... 查看详情

从零开始的java开发1-2-4java方法

文章目录方法方法分类数组作为方法参数方法重载基本数据类型的传值数组的传值(引用数据类型)可变参数列表可变参数列表作为方法参数的重载文档注释方法的调试细节与总结方法所谓方法,就是用来解决一类问... 查看详情

阿里云名师课堂java面向对象开发41:第03个代码模型综合案例:数据表与简单java类(一对多)

...后进行关系设计,列出数据表中对应的关系3、最后根据开发需求设计一对多回顾:复习《阿里云【名师课堂】Java面向对象开发9:【第01个代码模型】综合案例:简单Java类》https://blog.csdn.net/weixin_43624945/article/details/106601659要求程... 查看详情

从零开始做第三方支付开发-----初步了解概念

这是第三方支付开发的第一篇.目前很多公司在做海外支付,但是不知道怎么开始.本人公司就是做海外产品,涉及到paypal和stripe支付,有比较多的经验,希望可以帮助需要的朋友.我是做Java开发,所以这一系列的所有例子都用Java编写,其... 查看详情

从零开始创建自己的区块链应用(java版)

阅读对象本文阅读对象,主要是希望和即将从事区块链开发的项目架构师,开发工程师,项目设计或产品设计师。要求阅读者具备一定的“区块链”基础知识、概念和以及相关的技术知识。如果你只需要对区块链应用做一个更深... 查看详情

从零开始创建自己的区块链应用(java版)

阅读对象本文阅读对象,主要是希望和即将从事区块链开发的项目架构师,开发工程师,项目设计或产品设计师。要求阅读者具备一定的“区块链”基础知识、概念和以及相关的技术知识。如果你只需要对区块链应用做一个更深... 查看详情

从零开始学习java设计模式|行为型模式篇:状态模式(代码片段)

在本讲,我们来学习一下行为型模式里面的第五个设计模式,即状态模式。状态模式引入案例在学习状态模式之前,我们先来看一个案例,通过该案例来引出状态模式。这个案例就是通过电梯按钮来控制一个电梯... 查看详情

从零开始学习java设计模式|行为型模式篇:状态模式(代码片段)

在本讲,我们来学习一下行为型模式里面的第五个设计模式,即状态模式。状态模式引入案例在学习状态模式之前,我们先来看一个案例,通过该案例来引出状态模式。这个案例就是通过电梯按钮来控制一个电梯... 查看详情

java开发从零开始!kafka版本历史

ActiveMQ我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新... 查看详情