import java.util.Scanner;
/*
Utility工具类:将不同功能封装为方法,通过调用方法使用它的功能,不需考虑细节
*/
public class Utility
{
private static Scanner scanner=new Scanner(System.in);
/*
用于菜单界面的选择,读取键盘1-4返回相应方法
*/
public static char readMenuSelection()
{
char c;
while(true)
{
String str=readKeyBoard(1);
c=str.charAt(0);
if(c!='1'&&c!='2'&&c!='3'&&c!='4')
{
System.out.println("输入有误,请重新输入");
}
else
break;
}
return c;
}
/**
收入和支出金额的设置:从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值
*/
public static int readNumber()
{
int n;
while(true)
{
String str = readKeyBoard(4);
try
{
n=Integer.parseInt(str);
break;
}
catch (NumberFormatException e)
{
System.out.print("数字输入错误,请重新输入");
}
}
return n;
}
/*
用于收入和支出说明的输入。从键盘读取一个不超过8位长度的字符串,并将其作为返回值
*/
public static String readString()
{
String str= readKeyBoard(8);
return str;
}
/*
用于确认选择的输入,从键盘读取"Y"或"N",作为方法的返回值
*/
public static char readConfirmSelection()
{
char c;
while(true)
{
String str=readKeyBoard(1).toUpperCase();
c=str.charAt(0);
if(c=='Y'||c=='N')
{
break;
}
else
{
System.out.println("选择错误,请重新输入");
}
}
return c;
}
private static String readKeyBoard(int limit)
{ //定义readKeyBoard方法,限制输入长度
String line = "";
while (scanner.hasNext())
{
line = scanner.nextLine();
if (line.length() < 1 ||line.length() > limit)
{
System.out.print("输入长度错误(不大于" + limit +")");
continue;
}
else break;
}
return line;
}
}
我看着for(;;)不是很舒服,就把里面的这个结构都换成了while(true)。