import java.util.Scanner;
class CommonElements
{
public static void main(String args[])
{
int s1,s2,count=0;
boolean d;
Scanner sc=new Scanner(System.in);
System.out.println("Enter 1st array size");
s1=sc.nextInt();
int n1[]=new int[s1];
System.out.println("Enter "+s1+" nos for 1st array");
for(int i=0;i<s1;i++)
{
n1[i]=sc.nextInt();
}
System.out.println("Enter 2nd array size");
s2=sc.nextInt();
int n2[]=new int[s2];
System.out.println("Enter "+s2+" nos for 2nd array");
for(int i=0;i<s2;i++)
{
n2[i]=sc.nextInt();
}
System.out.println("\n");
for(int i=0;i<s1;i++)
{
for(int j=0;j<s2;j++)
{
if(n1[i]==n2[j])
{
d=true;
System.out.println(n1[i]);
}
else
d=false;
}
}
if(d==false)
System.out.println("there are no common elements");
}
}
这个编程应该返回2个数组中的所有常见元素,如果找到并且&amp;如果没有找到共同元素,则应显示there are no common elements
...此msg应仅显示一次,因此我使用布尔值。在for循环中,d
的布尔值正在改变,但是当它从for循环d
出来时,不会更改值。
答案 0 :(得分:1)
您应该删除else section
class CommonElements
{
public static void main(String args[])
{
int s1,s2,count=0;
boolean d = false; //Assign false to it
Scanner sc=new Scanner(System.in);
System.out.println("Enter 1st array size");
s1=sc.nextInt();
int n1[]=new int[s1];
System.out.println("Enter "+s1+" nos for 1st array");
for(int i=0;i<s1;i++)
{
n1[i]=sc.nextInt();
}
System.out.println("Enter 2nd array size");
s2=sc.nextInt();
int n2[]=new int[s2];
System.out.println("Enter "+s2+" nos for 2nd array");
for(int i=0;i<s2;i++)
{
n2[i]=sc.nextInt();
}
System.out.println("\n");
for(int i=0;i<s1;i++)
{
for(int j=0;j<s2;j++)
{
if(n1[i]==n2[j])
{
d=true;
System.out.println(n1[i]);
}
//else NO NEED OF THIS ELSE SECTION AS IF YOUR LAST
// COMPARISON DO NOT MATCHES THEN IT WILL REASSIGN FALSE VALUE
//d=false;
}
}
if(d==false)
System.out.println("there are no common elements");
}
}
答案 1 :(得分:0)
以下部分不在for循环中。将它带回第一个for循环,而不是查看更改。
if(d==false)
System.out.println("there are no common elements");
答案 2 :(得分:0)
我假设以下内容(因为我也无法阅读您的问题):
你有共同的元素,但输出仍然是there are no common elements
,对吗?
问题在于:您通过索引比较元素索引,但只有最后一个索引获胜,因为您在else块中将d设置为false。
考虑这种情况:数组A = [1,2],数组B = [1,3]
现在循环A和B,因此进行了以下检查:
这导致d
为假,因为实际上只有最后的比较才有意义。
删除else块,它应该可以正常工作(除非我还没有发现其他错误)。因此,您使用false初始化d,即您假设没有共同元素。找到一些之后,将d设置为true,甚至可能会破坏循环,因为您找到了所需的信息(至少有一对公共元素)。
或者计算公共元素对并检查该数字是否为0或更大。这将提供有关找到多对的附加信息。
编辑:作为代码格式化的附加提示,我个人发现总是使用大括号for循环以及if-else块更容易。这样,您可以减少尝试将另一个语句添加到单个元素块(即没有大括号)时可能意外引入的错误。这只是个人品尝/体验,但YMMV。
重要说明:如果删除else块,请初始化变量d
,否则将无法编译(d
可能会初始化)。