JAVA list的size为2,但是list取值拿不到只有[],不知道错误的解决办法

import java.util.*;
public class Main {
static List<HashSet> list =new LinkedList<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
int n = scanner.nextInt();
int m = scanner.nextInt();
while (m-- > 0) {
int u = scanner.nextInt();
int v = scanner.nextInt();
ArrayList<Integer> orDefault = map.getOrDefault(u, new ArrayList<>());
if (orDefault == null) orDefault = new ArrayList<>();
orDefault.add(v);
map.put(u, orDefault);
}
int d = scanner.nextInt();
int f = scanner.nextInt();
findRoad(map, d, f, new HashSet<Integer>());
if (list.size() <= 0) System.out.println(-1);
else {
int i1 = list.size();
HashSet res = null;
res=list.get(0);
System.out.println(res);
for (int i = 1; i < list.size(); i++) {
HashSet set1 = list.get(i);
res.retainAll(set1);
}
int size = res.size() == 1 ? 0 : res.size();
System.out.println(size - 1);
}
}
private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f,HashSet<Integer> set) {
if(set.contains(f)){
list.add(set);
for ( int i : set) {
System.out.print(i);
}
System.out.println();
return;
}
ArrayList<Integer> arrayList = map.get(d);
for (Integer integer : arrayList) {
set.add(integer);
findRoad(map,integer,f,set);
set.remove(integer);
}
}
输入是
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
输出是
3456
356
[]
-1
----------------------------------------------------简化版---------------------------------
public class test {
static List<HashSet> list = new LinkedList<>();
public static void main(String[] args) {
findRoad(map, d, f, new HashSet<Integer>());//dsf方法
int i1 = list.size(); //size =2; ?问题就是为什么size=2(方法调用两次add)但是get取值为[] 不应该是方法里面放进去的值么
list.get(0);//[]
}
private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f, HashSet<Integer> set) {
if (set.contains(f)) {
list.add(set);
}
//这是dfs
}
}
为啥要我说得这么直白呢?你学的是啥玩意呀???
findRoad(map, d, f, new HashSet<Integer>());
private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f,HashSet<Integer> set) {
这个set 不是你 new HashSet<Integer>()这个么?
你有放入数值么?有操作过么?
没有操作过set.contains(f)意义何在?代码写着玩么?浪费这么多时间。每行代码我都看得懂,都不想点破。
好好学习基础,不行从头来。要不很简单的问题你会浪费自己和别人很多时间的。另外,log要加标记,前缀/后缀,否则哪里出来的你都不知道。
public class Main { //创建一个集合 static List<HashSet> list =new LinkedList<>(); public static void main(String[] args) { //扫描输入内容 Scanner scanner = new Scanner(System.in); HashMap<Integer, ArrayList<Integer>> map = new HashMap<>(); //第一个数值 int n = scanner.nextInt(); //第二个数值 int m = scanner.nextInt(); //做m次循环 while (m-- > 0) { //输入数值u---> key int u = scanner.nextInt(); //输入数值 v---> List<value> int v = scanner.nextInt(); //双创建一个集合从map里拿值,如果没有的话就返回一个空的集合 ArrayList<Integer> orDefault = map.getOrDefault(u, new ArrayList<>()); //有默认值不为空,所以有集合 if (orDefault == null) orDefault = new ArrayList<>(); //添加v值 orDefault.add(v); //把这个集合放到map里 map.put(u, orDefault); } //双来一个数值d int d = scanner.nextInt(); //再来一个数值f int f = scanner.nextInt(); // findRoad(map, d, f, new HashSet<Integer>()); //list有动过吗? if (list.size() <= 0) System.out.println(-1); else { // int i1 = list.size(); HashSet res = null; res=list.get(0); System.out.println(res); for (int i = 1; i < list.size(); i++) { HashSet set1 = list.get(i); res.retainAll(set1); } int size = res.size() == 1 ? 0 : res.size(); System.out.println(size - 1); } } private static void findRoad(HashMap<Integer, ArrayList<Integer>> map, int d, int f,HashSet<Integer> set) { //如果set包含f,这可能包含吗?set不是刚new的吗? if(set.contains(f)){ list.add(set); for ( int i : set) { System.out.print(i); } System.out.println(); return; } //d必须是前面输入的u,否则怎么可能有呢? ArrayList<Integer> arrayList = map.get(d); for (Integer integer : arrayList) { set.add(integer); //递归? findRoad(map,integer,f,set); set.remove(integer); } }没注释,看不懂你要做什么。