从零开始的Java开发1-2-5 Java综合案例:数组移位与统计
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的Java开发1-2-5 Java综合案例:数组移位与统计相关的知识,希望对你有一定的参考价值。
文章目录
综合案例需求
需求:定义一个类,对数组中的数据进行管理。
管理包括:
- 插入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-5 集合综合案例:播放器管理
从零开始的Java开发1-5-4 ArrayListHashSetHashMap 概述与案例
从零开始的Java开发2-9-2 案例:仿Windows计算器