我正在尝试编写一个简单的问题。只是为了澄清它,而不是正在进行的比赛。 这是代码
package Algorithms;
import java.util.HashSet;
import java.util.Scanner;
public class shino {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int seq[]= new int[a];
int count=0;
for(int j=0;j<a;j++){
seq[j] = sc.nextInt();
}
HashSet<HashSet> hashSets = new HashSet<>();
for(int y=0;y<seq.length;y++){
for(int u=0;u<seq.length;u++){
HashSet<Integer> hash = new HashSet<>();
int q =Math.abs(y-u);
if(y!=u && q==1 ) {
hash.add(seq[y]);
hash.add(seq[u]);
}
if(hashSets.add(hash)){
System.out.println(seq[y]+" "+seq[u]);
count++;
}
}
}
System.out.println(count);
}
}
现在你可以看到有一个 y!= u 的情况,但是当我把输入作为
时5
1 2 3 4 5
输出它yealds
1 1
1 2
2 3
3 4
4 5
5
为什么顶部有两个 1 1 ? 我真的不知道我在这里做错了什么? 说实话,我确实有一些编程exp,但我真的无法弄清楚为什么会这样?
答案 0 :(得分:2)
你是第一次添加空的HashSet,只允许一个建议你的第二个布尔测试是不好的:
HashSet<Integer> hash = new HashSet<>();
int q =Math.abs(y-u);
if(y!=u && q==1 ) {
hash.add(seq[y]);
hash.add(seq[u]);
}
if(hashSets.add(hash)){
System.out.println(seq[y]+" "+seq[u]);
count++;
}
而是将所有内容放在第一个if块中:
HashSet<Integer> hash = new HashSet<>();
int q = Math.abs(y-u);
if(y != u && q == 1 ) {
hash.add(seq[y]);
hash.add(seq[u]);
System.out.println(seq[y] + " " + seq[u]);
count++;
}
注意:为什么要测试y != u
,因为如果q == 1
,y 不能等于你
更好的是:
if (q == 1) {
hash.add(seq[y]);
hash.add(seq[u]);
System.out.println(seq[y] + " " + seq[u]);
count++;
}