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} 则输出“成功”

我的代码为什么错误?
展开
 我来答
雪飞潇潇
2018-03-26 · TA获得超过6274个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:864万
展开全部

图片代码看不清, 我写了一个完整版的,你可以参考. 删除注释后,代码很短

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("失败");

}
}
}
吕三布
2018-03-26 · TA获得超过292个赞
知道小有建树答主
回答量:187
采纳率:87%
帮助的人:66.9万
展开全部

没细看你的逻辑,不过我觉得你这个需求完全可以转换一下,将两个数组转为list,然后判断两个list的包含关系,主要api包含两个

  1. 数组转list::: Arrays.asList

  2. 两个list判断包含关系 listA.containsAll(listB)

追问
刚学习java 才接触数组..
追答
我只是针对于你的这个需求去做,如果你是想熟悉下数组和锻炼逻辑的话,我的这个方案就不适合了,如果是问了快速解决这个问题,我这个方案是可行的
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式