Java中怎么比较输入的数组是否被已知数组包含 30
例如a[6]={1,2,3,4,5,6}输入b[3]={1,2,3}则输出“成功”我的代码为什么错误?...
例如a[6]={1,2,3,4,5,6} 输入b[3]={1,2,3} 则输出“成功”
我的代码为什么错误? 展开
我的代码为什么错误? 展开
展开全部
图片代码看不清, 我写了一个完整版的,你可以参考. 删除注释后,代码很短
public class AryDemo {
public static void main(String[] args) {
int[] ary1 = { 0, 8, 1, 0, 6 };
int[] ary2 = { 1, 6, 8 };
int[] ary3 = { 5, 2, 8 };
int[] ary4 = { 6, 6 };
int[] ary5 = { 0, 8, 1, 0, 1, 3, 6 };
System.out.println(isContent(ary1, ary2));// 包含
System.out.println(isContent(ary1, ary3));// 不包含,数组一没有元素5和2
System.out.println(isContent(ary1, ary4));// 不包含,数组一只有1个6 ,数组四有2个6
System.out.println(isContent(ary1, ary5));// 不包含,数组五长度比数组一还要长
if (isContent(ary5, ary1)) {
System.out.println("成功: ary5包含ary1");
} else {
System.out.println("Sorry: ary5不包含ary1");
}
}
//方法作用: 查找数组A是否包含数组B
//方法参数 两个int数组
//方法返回值 boolean类型 true代表包含 false代表不包含
public static boolean isContent(int[] aryA, int[] aryB) {
// 为空,或者A数组长度小于B数组返回false
if (aryA == null || aryB == null || aryA.length < aryB.length) {
return false;
}
boolean[] flags = new boolean[aryA.length];// 用于标记A数组的元素是否被使用
int findTimes = 0;// 相同元素的个数
for (int i = 0; i < aryB.length; i++) {
for (int j = 0; j < aryA.length; j++) {
if (aryB[i] == aryA[j] && !flags[j]) {// 如果aryA[j]的元素没有使用过,并且和aryB[i]相同
flags[j] = true; // 标记为已经使用了
findTimes++; // 相同元素+1
break;// 跳出本层循环,不再继续找了
}
}
}
return findTimes == aryB.length;// 返回元素个数和相同元素个数是否一致
}
}
测试结果
true
false
false
false
成功: ary5包含ary1
追问
我写的逻辑是Scanner输入3个数组元素 和原数组a[0]a[1]a[2]以此类推三个三个比较 每次a初始的下标加一 。我觉得逻辑上应该没有问题 但是一直输出不了正确答案 很疑惑
追答
提问的时候可以贴代码,或者清晰的图片
数组A是否包含数组B,就直接使用我上面写的方法, 可以使用的.
你上面的做法不能判断数组A是否包含数组B,只能严格要求,A和B数组元素一致的情况下可以判断
按照你的逻辑写的代码. 你去参考和理解
import java.util.Scanner;
public class AryDemo {
public static void main(String[] args) {
int[] a = { 0, 8, 1, 0, 6 };
int[] b = new int[3];
Scanner sc = new Scanner(System.in);
boolean flag=true;
for (int i = 0; i < b.length; i++) {
System.out.println("请输入第"+(i+1)+"个数字");
b[i]=sc.nextInt();
if(a[i]!=b[i]) {
flag=false;
}
}
if(flag) {
System.out.println("成功 数组a包含数组b (索引从0开始,且顺序一致)");
}else {
System.out.println("失败");
}
}
}
展开全部
没细看你的逻辑,不过我觉得你这个需求完全可以转换一下,将两个数组转为list,然后判断两个list的包含关系,主要api包含两个
数组转list::: Arrays.asList
两个list判断包含关系 listA.containsAll(listB)
追问
刚学习java 才接触数组..
追答
我只是针对于你的这个需求去做,如果你是想熟悉下数组和锻炼逻辑的话,我的这个方案就不适合了,如果是问了快速解决这个问题,我这个方案是可行的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询