java学习中遇到的Scanner死循环问题

s = new Scanner(System.in);

程序描述:从控制台读取一个Int类型的整数,并输出。如果,输入格式不对则捕获异常,并重新要求输出,直到输入正确。

package java_learning;
import java.util.*;

public class Test {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while (true) {
			try {
				System.out.println("请输入a:");
				int a = s.nextInt();
				System.out.println("a:"+a);
				return;
			} catch (InputMismatchException e) {
				System.out.println("重新输入!");
				//s = new Scanner(System.in);
				continue;
			}
		}
	}
}
问题运行结果,死循环。。。
解决:对s进行重新实例化。
即加上程序的注释行:s = new Scanner(System.in);

好的,下面我会详细介绍如何利用 Java 实现通过死循环断向数组添加元素的过程,并解释其中涉及的关键点。 ### 步骤说明 1. **创建动态数据结构**:由于数组长度固定,在知道用户会输入多少个元素的情况下,建议使用 `ArrayList` 而是普通数组。`ArrayList` 的大小可以根据需要自动调整。 2. **设置死循环**:为了持续接收用户的输入直到满足特定条件结束(如输入 "exit" 或者其他指定命令),可以使用 while(true) 形式的死循环。 3. **读取并处理用户输入**:每次迭代时提示用户输入一个整数,并将其转换为适当的数值类型加入到列表中;如果遇到终止指令则跳出循环。 4. **将 ArrayList 转换回 Array (可选)** :如果你最终确实需要得到一个标准数组而非 ArrayList ,那么可以在所有输入完成后进行此操作。 ```java import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args){ // 创建一个新的 Scanner 对象用于获取控制台输入 Scanner scanner = new Scanner(System.in); // 使用 ArrayList 存储从键盘接收到的数据项 ArrayList<Integer> numbers = new ArrayList<>(); System.out.println("请输入数字(单独一行),键入 'stop' 结束:"); String input; try{ while (true){ // 设置无限循环等待输入 input = scanner.nextLine(); if ("stop".equalsIgnoreCase(input)){ break; // 如果检测到 stop 命令,则退出循环 } else { int num = Integer.parseInt(input.trim()); numbers.add(num); // 将有效数字追加至集合末端 } } // 输出结果信息 System.out.print("您已成功录入了以下数字序列:\n"); for(int i : numbers) System.out.printf("%d ",i); // 可选择地把 ArrayList 转换成 数组形式返回给调用方 Object[] resultArray = numbers.toArray(); } catch(NumberFormatException e){ System.err.println("无效的输入,请只提供有效的整数."); } finally { scanner.close(); // 关闭资源释放内存空间 } } ``` 上述代码展示了一个简单的程序框架来实现连续断地收集来自终端的标准输入并将它们存储在一个列表里头的功能模块。当接收到特殊字符串 `"stop"` 后就会停止记录进一步的操作并且打印出之前所获得的所有条目。 --
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值