我实际上对我的程序有困难。事实上,我在学校(11年级-大专)学习,所以请用非常简单的语言解释我。我正在开发一个测验,非常基本的学校项目,所以程序是这样进行的......我想让用户输入他/她的选择,通过输入1-4的数字。我不希望用户输入字母表、字母或特殊字符或除1-4以外的任何其他数字。我尝试使用try and cat,但我的程序在抛出异常后停止。我希望程序代码即使在显示错误消息System.out.println(“无效输入”)后也能运行。请输入1-4之间的数字);示例程序
import java.io.*;
import java.lang;
public class
{
public static void main()throws IOException
{
InputStreamReader read =new InputStreamReader (System.in);
BufferedReader in =new BufferedReader (read);
System.out.println(" Select your category");
System.out.println(" 1. Food");
System.out.println(" 2. National");
System.out.println("");
System.out.println(" Enter your choice");
int choice=Integer.parseInt(in.readLine());
if(choice==1)//food category
{
int score = 0;
System.out.println("what are dynamites made?");
System.out.println("1. peanuts");System.out.println("2. grapes");
System.out.println("3. flaxseeds");System.out.println("4. fish");
System.out.println(" Enter your choice");
int food1= Integer.parseInt(in.readline());
if(c1=1)
{ System.out.println(" Correct answer");
score=score+10
}
else
{
System.out.println(" Wronge answer");
score=score+0
}
//then i have the second question with the same format
}
if(choice==2)//natioanl category with the same format as above
{//two question with if else statements in them }
}
}// also help me where to add the try and catch statements
这个问题有一个更优雅的解决方案。不涉及尝试捕捉。
import java.io.*;
import java.lang;
public class
{
//Compares response to the string representations of all numbers between 1 and numOptions, inclusive.
//Returns the matching integer or -1 otherwise.
public static int parseResponse(String response, int numOptions)
{
for(int i=1;i<=numOptions;i++) {
if(response.equals(Integer.toString(i))) return i;
}
return -1;
}
public static void main()throws IOException
{
InputStreamReader read =new InputStreamReader (System.in);
BufferedReader in =new BufferedReader (read);
System.out.println(" Select your category");
System.out.println(" 1. Food");
System.out.println(" 2. National");
System.out.println("");
System.out.println(" Enter your choice");
//New code
int choice=-1;
while(choice==-1) {
choice=parseResponse(in.readLine(),2);
if(choice==-1)
{
System.out.println(" Invalid input. Please enter a number between 1-2");
}
}
if(choice==1)//food category
{
int score = 0;
System.out.println("what are dynamites made?");
System.out.println("1. peanuts");System.out.println("2. grapes");
System.out.println("3. flaxseeds");System.out.println("4. fish");
System.out.println(" Enter your choice");
//New code
int food1=-1;
while(food1==-1) {
food1=parseResponse(in.readLine(),4);
if(food1==-1)
{
System.out.println(" Invalid input. Please enter a number between 1-4");
}
}
if(food1==1)
{ System.out.println(" Correct answer");
score=score+10
}
else
{
System.out.println(" Wronge answer");
score=score+0
}
//then i have the second question with the same format
}
if(choice==2)//natioanl category with the same format as above
{//two question with if else statements in them
}
}
}// also help me where to add the try and catch statements
如果你不知道:
if(response.equals(Integer.toString(i))) return i;
是和一样的
if(response.equals(Integer.toString(i)))
{
return i;
}
嘿,这是你可以运行的代码。
import java.io.*;
import java.lang.*;
public class TestTryCatch
{
public static void main(String args[])
{
try
{
InputStreamReader read =new InputStreamReader (System.in);
BufferedReader in =new BufferedReader (read);
System.out.println(" Select your category");
System.out.println(" 1. Food");
System.out.println(" 2. National");
System.out.println("");
System.out.println(" Enter your choice");
int choice=0;
try
{
choice = Integer.parseInt(in.readLine());
}
catch(Exception e)
{
choice=0;
}
if(choice==0)
{
System.out.println("Invalid Input");
}
if(choice==1)//food category
{
int score = 0;
System.out.println("what are dynamites made?");
System.out.println("1. peanuts");System.out.println("2. grapes");
System.out.println("3. flaxseeds");System.out.println("4. fish");
System.out.println(" Enter your choice");
int food1= Integer.parseInt(in.readLine());
if(food1==1)
{ System.out.println(" Correct answer");
score=score+10;
}
else
{
System.out.println(" Wronge answer");
score=score+0;
}
}
if(choice==2)
{
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
在你转换成整数的地方放一个尝试捕捉。如果你的代码给出了异常,它会进入异常块,处理你想要的任何值。这里我把它放成了0,你也可以选-1。
如果这段代码有帮助或没有帮助,请恢复。
程序崩溃的地方是:
int food1= Integer.parseInt(in.readline());
if(c1=1)
{ System.out.println(" Correct answer");
score=score+10
}
“c1”不是一个已定义的变量,因此无论用户输入什么,使用它都会导致程序崩溃。你应该用“food1”代替“c1”。此外,赋值运算符“=”应替换为比较运算符“=”。
查看整数的javadoc(谷歌“Integer javadoc”),你会发现
public static int parseInt(String s)
throws NumberFormatException
因此,我们需要抓住数字形式感知。运行程序时,通过查看堆栈跟踪,还可以找出抛出了什么异常以及在哪里。
每当抛出异常时,都会跳过错误之后和下一个“}”之前的所有内容。由于大多数代码在错误发生后都会正常执行,我们希望尽量减少尝试捕获,即。
try {
int choice=Integer.parseInt(in.readLine());
} catch (NumberFormatException ex) {
//Not a number
}
我们需要变量“choice”在try之外可以访问,所以我们将在try之外声明它。
int choice;
try {
choice=Integer.parseInt(in.readLine());
} catch (NumberFormatException ex) {
//Not a number
}
但是,NumberFormatException不会告诉您用户是否输入了1-4以外的数字。因此,您必须添加自己的验证。
int choice;
try {
choice=Integer.parseInt(in.readLine());
if(choice<1 || choice>4) ; //Not 1-4
} catch (NumberFormatException ex) {
//Not a number
}
最后,我们需要跟踪我们的输入是否有效,并在需要时循环。
boolean valid=false;
while(!valid) {
int choice;
try {
choice=Integer.parseInt(in.readLine());
if(choice<1 || choice>4) valid=false; //Not 1-4
else valid=true;
} catch (NumberFormatException ex) {
//Not a number
valid=false;
}
if(valid) {
//Handle valid response here
} else {
System.out.println(" Invalid input. Please enter a number between 1-4");
}
}
祝你好运!
问题内容: 最近,我遇到了一位程序员的代码,其中他在catch中有一条try-catch语句! 请原谅我无法粘贴实际代码,但是他所做的与以下内容类似: 我个人认为这是我见过的最差的代码!以1到10的比例,您认为我应该多久才能动一下脑子,还是我反应过度? 编辑:他实际上在抓捕中所做的事情,他正在执行一些操作,这些操作在初始尝试失败时可以/应该执行。我的问题是拥有干净的代码和可维护性。将异常从第一个c
有可能在SWIFT中捕捉异常吗?给定以下代码: 有可能防止异常使整个程序崩溃吗?也就是说,在Objective-C中,与以下内容相对应的Swift等价是什么:
本节介绍如何使用三个异常处理程序组件(try、catch 和 finally)来编写异常处理程序。 然后,介绍了 Java SE 7中引入的 try-with-resources 语句。 try-with-resources 语句特别适合于使用Closeable的资源(例如流)的情况。 本节的最后一部分将通过一个示例来分析在各种情况下发生的情况。 以下示例定义并实现了一个名为ListOfNumbe
我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否
问题内容: 我有此代码- 编译器将如何实际实现这一点。实际在汇编代码中生成的异常检查在哪里? 更新 我知道上面的代码如何转换为 bytecode 。字节码仅将try-catch转换为相应的try- handler块。我对它将如何转换为jvm进行汇编和/或处理感兴趣。 问题答案: 试捕法的成本 大致来说,block不会向结果程序集中添加任何异常检查代码。只要不引发异常,它基本上是无操作的。所有缓慢的
问题内容: 好,我有问题。如果在处理HTTP请求时发生未捕获的异常,则我没有机会在http.ServerResponse对象上调用end()方法。因此,服务器将永远挂起并且永远不会满足该请求。 这是一个例子: 如果访问/ error,则会发生异常,但会被捕获。用户收到错误消息-没问题。但是,如果我访问/ hang,服务器最终将抛出未捕获的异常并永远挂起。以后对/ hang的任何请求都将挂起。 糟透