我让这个java代码输入一个数字:
public static void main(String[] args)
{
int temp;
do{
Scanner scan = new Scanner(in);
out.print("enter number ");
temp = scan.nextInt();
if(temp >= 5 && temp <= 40){
int x = (temp-1)*2 +1;
int y = x/2;
int z = 1;
for(int i=0; i<temp-1; i++)
{
for(int j=0; j<=y; j++)
{
out.print(" ");
}
for(int k = 0; k<z; k++)
{
out.print("|");
}
out.println();
y--;
z+=2;
}
for(int c = 0; c < 1 + temp/10; c++) {
for (int i = 0; i <= x / 2; i++)
{
System.out.print(" ");
}
System.out.println("|");
}
}else{
out.print("enter a number between 5 and 40");
}
}while(temp != 0);
}
}
但是,如果输入例如字母或无效字符,则会返回错误。我想知道如何,而不是让程序崩溃,让它显示错误信息,然后再问问题,直到输入正确?
答案 0 :(得分:1)
import java.io。*;
import java.util。*;
public class Main
{
public static void main(String[] args)
{
int temp=0;
boolean error=false;
do{
error=false;
try
{
Scanner scan = new Scanner(System.in);
System.out.print("enter number ");
temp = scan.nextInt();
if(temp==0)
break;
if(temp >= 5 && temp <= 40)
{
int x = (temp-1)*2 +1;
int y = x/2;
int z = 1;
for(int i=0; i<temp-1; i++)
{
for(int j=0; j<=y; j++)
{
System.out.print(" ");
}
for(int k = 0; k<z; k++)
{
System.out.print("|");
}
System.out.println();
y--;
z+=2;
}
for(int c = 0; c < 1 + temp/10; c++)
{
for (int i = 0; i <= x / 2; i++)
{
System.out.print(" ");
}
System.out.println("|");
}
}
else
{
System.out.println("enter a number between 5 and 40");
}
}catch(Exception e)
{
System.out.println("Enter a valid number..try again");
error=true;
}
}while(temp != 0 || error);
}
}
当发生错误或异常时,例如在scan.nextInt()中抛出异常,因为您没有捕获到异常,JVM就会停止执行该程序。
因此总是编写可以在try {}块中抛出异常的语句,并使用catch(Exception e){}块紧跟它以捕获异常。如果没有异常发生,那么catch块将不会执行。如果try {}块内发生任何错误:控制跳转到catch块并执行它,并且try {}(错误行之后)中的所有其他语句都被忽略。
试 { .. 错误 .. //跳过 .. } catch(例外e) { ... ... //处理异常 } //控制在执行catch块
后来到这里答案 1 :(得分:0)
将用户的值作为字符串读入,然后尝试将其解析为try {} catch {}块中的数字,如果抛出异常,则告诉用户只有数字是可接受的。如果没有继续处理他们给你的号码。
答案 2 :(得分:0)
延伸@Shouvik Roy的回答..
import java.util.Scanner;
public class Bingo {
public static void main(String[] args){
boolean isInt = false;
int temp;
System.out.print("enter a number ");
do{
Scanner scan = new Scanner(System.in);
try
{
temp = scan.nextInt();
isInt = true;
}
catch(Exception e)
{
System.out.println("Couldn't read number. Reason - "+e.getMessage());
System.out.println("Enter a valid number ");
}
}while(!isInt);
}
}
------------------编辑-------------------
boolean isInt = false;
System.out.print("enter a number ");
do{
try
{
Scanner scan = new Scanner(in);
temp = scan.nextInt();
isInt = true;
}
catch(Exception e)
{
System.out.println("Couldn't read number. Reason - "+e.getMessage());
System.out.println("Enter a valid number ");
}
}while(!isInt)
答案 3 :(得分:0)
Scanner有一种检查下一个标记是否为整数的方法:hasNextInt。
你可以这样做:
package com.sandbox;
import java.util.Scanner;
public class Sandbox {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter an integer:");
while (!scanner.hasNextInt()) {
System.err.println("Wrong! Enter an integer");
scanner.next();
}
System.out.println("Your integer was: " + scanner.nextInt());
}
}
这在Windows控制台上非常有用。我有点担心它在Linux / Mac上运行不正常。有人介意给我测试一下吗?如果这样可行,我最喜欢它,因为没有尝试/捕获。