java输入数字后输入多行并输出

项目场景:

参加某五百强企业机考题

1.第一行输入行数;

2.第一行之后开始输入多个数字,空格作为间隔;

3.输入结束后开始读取每一行数据,每次读取的数量为num定义的数量,直到没有数据读取,最后组成一个新的list输出。

输入示例:

3
1 2 3
1 2 3 4 5 6
1 2 3 4

输出示例:

1,2,3,1,2,3,1,2,3,4,5,6,4


问题描述:

当时参考了机考提供的示例题,使用while和hasNextInt实现多行输入,但有换行后自动结束等问题

@Test
public void test03() {
	Scanner input = new Scanner(System.in);
	Integer num = 3;
	Integer arrNum = input.nextInt();
	Map<Integer, List<Integer>> map = new LinkedHashMap<>();
	for (int i = 0; i < arrNum; i++) {
		List<Integer> list = new ArrayList<>();
		while (input.hasNextInt()) {
			list.add(input.nextInt());
		}
		map.put(i, list);
		System.out.println(JSONUtil.toJsonStr(map));
	}
	List<Integer> newList = new ArrayList<>();
	while (!map.isEmpty()) {
		Iterator<Integer> mapIterator = map.keySet().iterator();
		while (mapIterator.hasNext()) {
			Integer key = mapIterator.next();
			List<Integer> list = map.get(key);
			Iterator<Integer> listIterator = list.iterator();
			int i = 0;
			while (listIterator.hasNext() && i < num) {
				newList.add(listIterator.next());
				listIterator.remove();
				i++;
			}
			if (list.size() == 0) {
				mapIterator.remove();
			}
		}
	}

	System.out.println(newList.toString());
}

原因分析:

尝试断点追踪,猜测是hasNextInt方法内的hasNext下的ensureOpen判断错误。


解决方案:

@Test
public void test03() {
	Scanner input = new Scanner(System.in);
	Integer num = 3;
	Integer arrNum = input.nextInt();
	Map<Integer, List<String>> map = new LinkedHashMap<>();
	for (int i = 0; i < arrNum; i++) {
		String str = input.nextLine();
		String[] arrays = str.split(" ");
		List<String> strList = Stream.of(arrays).collect(Collectors.toList());
		map.put(i, strList);
		System.out.println(JSONUtil.toJsonStr(map));
	}
	List<String> newList = new ArrayList<>();
	while (!map.isEmpty()) {
		Iterator<Integer> mapIterator = map.keySet().iterator();
		while (mapIterator.hasNext()) {
			Integer key = mapIterator.next();
			List<String> list = map.get(key);
			Iterator<String> listIterator = list.iterator();
			int i = 0;
			while (listIterator.hasNext() && i < num) {
				newList.add(listIterator.next());
				listIterator.remove();
				i++;
			}
			if (list.size() == 0) {
				mapIterator.remove();
			}
		}
	}

	System.out.println(newList);
}

因为经验不足无法准确找出问题原因,若有知道的欢迎评论区告知。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值