java判断两数组是否有序
编写具有如下函数原型的递归与非递归两种函数equ,负责判断数组a与b的前n个元素值是否按下标对应完全相同,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool equ(int a[], int b[], int n);
提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),并返回递归调用的结果(与前n-1个元素的是否相等性相同)。
7.2概要设计:
本程设计思路: 总的来说并不难。由于跟上一个题目基本是没有什么太大的变化。关键就还是在于递归以及非递归算法是怎么写的。非递归就是将两个数组里的数一个一个一次比较就行了。递归则是用到循环调用。出错的处理则是交给java中的try,catch语句。
程序流程图(如左图):
7.3 详细设计与编码:
见上传程序。
7.4 调试分析:
因为跟之前的实验基本是一样的,所以调试的时候到是没有出项什么问题,就是忘了写try,catch语句来检测错误了。
程序执行的结果:
错误检测
7.5 用户使用说明:
用户根据程序的提示输入数组,以及想要使用的判断方法,程序就会自己计算出所需的得数。如果有错误的话,程序会提出警示。
7.6 设计心得:
对于这次的实验基本就是上一个实验的翻版,所以在做起来是相当的快,没费多少时间就完成了。不过倒是经常会忘了错误的检测,实在是没有这个习惯。不过我觉得有错误的检测还是不错的,至少对于将来工作的话是会有不小的帮助的吧。
/*
编写具有如下函数原型的递归与非递归两种函数equ,
负责判断数组a与b的前n个元素值是否按下标对应完全相同,是则返回true,否则返回false。
并编制主函数对它们进行调用,以验证其正确性。
bool equ(int a[], int b[], int n);
提示:递归函数中可按如下方式来分解并处理问题,先判断最后一个元素是否相同,不同则返false;
相同则看n是否等于1,是则返回true,否则进行递归调用(传去实参a、b与 n-1,去判断前n-1个元素的相等性),
并返回递归调用的结果(与前n-1个元素的是否相等性相同)。
*/
import java.io.*;
public class shiwu {
static String printArray(int[]a){//输出数组
String result=" ";
for(int i=0;i<a.length;i++) result+=a[i]+" ";
return result;
}
static boolean equ1(int a[],int b[],int n){//非递归判断是否相等
int i,j=0;
for(i=0;i<n;i++)
for(;j<n;j++){
if(i==j&&a[i]==a[j]){
j++;
break;
}
else return false;
}
return true;
}
static boolean equ2(int a[],int b[],int n){//递归判断是否相等
boolean f;
if(a[n-1]!=b[n-1])
f=false;
else if(n==1)
f=true;
else f=equ2(a,b,n-1);
return f;
}
public static void main(String args[])throws IOException{
try{
int i;
boolean x;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("输入数组的大小:");
System.out.flush();
int m=Integer.parseInt(br.readLine());
int a[]=new int[m];
int b[]=new int[m];
System.out.println("请输入a数组各个数的值:");
System.out.flush();
for(i=0;i<m;i++){
a[i]=Integer.parseInt(br.readLine());
}
原文请找腾讯752018766优,文-论'文.网http://www.youerw.com
System.out.flush();
int n1=Integer.parseInt(br.readLine());
if(n1==1){
x=equ1(a,b,n);
if(x) System.out.println("非递归判断:a和b数组前"+n+"位相等");
else System.out.println("非递归判断:a和b数组前"+n+"位不相等");
}
if(n1==2){
x=equ2(a,b,n);
if(x) System.out.println("递归判断:a和b数组前"+n+"位相等");
else System.out.println("递归判断:a和b数组前"+n+"位不相等");
}
}catch(Exception e){
System.out.println("输入有错!");1837