java - 对于两个整数用户输入,如何检测在第一个输入上传递了一个字符串?
问题描述
这是我的代码。检查用户输入“开始”和“停止”之间的素数的程序。
import java.util.*;
public class test
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while(true)
{
System.out.println("Enter start: ");
String start = sc.nextLine();
if(start.equalsIgnoreCase("stop"))
{
break;
}
System.out.println("Enter stop: ");
String stop = sc.nextLine();
if(stop.equalsIgnoreCase("stop"))
{
break;
}
try
{
int s1 = Integer.parseInt(start);
try
{
int s2 = Integer.parseInt(stop);
for(int i = s1; i<=s2;i++)
{
if(p1.isPrime(i))
{
System.out.print(i+" ");
}
}
System.out.println("");
}
catch(java.lang.NumberFormatException er)
{
System.out.println("Invalid Input");
}
}
catch(java.lang.NumberFormatException er1)
{
System.out.println("Invalid Input");
}
}
}
}
在开始输入时,如果我输入任何字符串,我希望代码立即检测 NumberFormatException 并再次请求相同的输入。
相反,它接受两个输入,无论是字符串还是整数,然后才评估它是否是字符串。
我不使用sc.nextLine()
,因为我想要停止功能。如果我在任何地方输入“停止”,我希望程序停止执行。
解决方案
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int start = -1;
int stop = -1;
while (true)
{
if (start == -1)
{
System.out.println("Enter start: ");
if (sc.hasNextInt())
{
start = sc.nextInt();
} else if (sc.nextLine().equalsIgnoreCase("stop")) break;
else
{
System.out.println("Invalid Input");
continue;
}
}
if (stop == -1)
{
System.out.println("Enter stop: ");
if (sc.hasNextInt())
{
stop = sc.nextInt();
} else if (sc.nextLine().equalsIgnoreCase("stop")) break;
else
{
System.out.println("Invalid Input");
continue;
}
}
for (int i = start; i <= stop; i++)
{
// Prime number method call here
System.out.print(i + " ");
}
System.out.println();
start = stop = -1;
}
}
推荐阅读
- java - 来自 Spring JPA 查询的自定义结果
- r - fct_collapse 的否定级别
- python - 为什么 Python 不能在没有打开 RDP 连接的情况下在 VM 上设置 Excel 打印区域?
- html - 使用字体真棒图标播放音频网址
- java - RCP nattable groupBy 列用于 55,000+ 数据性能
- scala - 如何将几列的值合并到 Spark Dataframe 中的地图中
- google-sheets - 有没有办法在 Google 表格上部署机器学习模型?
- python - 尝试连接到 dask 仪表板时出现“404 Not found”
- c++ - 带有“无限”参数的 c++ 模板
- electron - 在 Cypress 中设置 Electron 的语言