通过以下这个小案例,来作为Java入门的第一课。虽然之前学过C#语言和C语言,但还是仔仔细细的敲了以下代码,并且都有详细的注释。相信这对有过其它编程语言基础的你并不难。
先来看下要实现的效果:
首先要写个工具类,其中readKeyBoard方法要多注意
import java.util.Scanner;
/**
Utility工具类:
将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节
*/
public class Utility
{
private static Scanner scanner=new Scanner(System.in);
/*
定义一个readKeyBoard函数,用于从键盘读取参数限制长度的一行内容
*/
private static String readKeyBoard(int limit) {
String line = "";
while (scanner.hasNext()) {
/*
Scanner类中的hasNext方法读取的是boolean型的值,用于检测输入是否还有其他单词,有则真无则假
官方解释:当执行到hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。
直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描。
*/
line = scanner.nextLine(); //将从键盘上读取到的内容赋给line,为字符串类型
if (line.length() < 1 || line.length() > limit) {
//当输入字符串长度小于1或输入字符串长度超过参数限制时执行
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue; //再次执行循环来读取键盘输入的有意义的值
}
break; //当读取到的字符串符合要求则终止循环,执行循环外的下一条语句返回字符串
}
return line; //返回读取到的指定长度内的字符串字面量
}
/**
菜单界面的选择
该方法读取键盘,如果用户输入‘1’~‘4’中的任意字符,则方法返回。
返回值为用户键入字符。
*/
public static char readMenuSelection()
{
char c;
for( ; ; )
{
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;
for( ; ; )
{
String str=readKeyBoard(4);
try
{
n=Integer.parseInt(str);
break;
}
catch (NumberFormatException e)
{
System.out.println("数字输入错误,请重新输入:");
}
}
return n;
}
/**
用于收入和支出说明的输入。
该方法从键盘读取一个长度不超过8位的字符串,并将其作为方法的返回值
*/
public static String readString()
{
String str=readKeyBoard(8);
return str;
}
/**
用于确认选择的输入。
该方法从键盘读取‘Y’或‘N’,并将其作为方法的返回值
*/
public static char readConfirmSelection()
{
char c;
for( ; ; )
{
String str=readKeyBoard(1).toUpperCase();
c=str.charAt(0);
if(c=='Y'||c=='N')
{
break;
}
else
{
System.out.print("输入错误,请重新输入:");
}
}
return c;
}
}
main()函数里的代码不多
class FamilyAccount
{
public static void main(String[] args)
{
boolean isFlag=true;
//用于记录用户收入和支出详情
String details="收支\t账户金额\t收支金额\t说 明\n";
//出入金额
int balance=10000;
while(isFlag)
{
System.out.println("---------------家庭收支记账软件---------------");
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退 出");
System.out.print(" 请选择(1~4):");
//获取用户选择:1~4
char selection=Utility.readMenuSelection();
switch(selection)
{
case '1':
//System.out.println("1.收支明细");
System.out.println("---------------当前收支明细记录---------------");
System.out.println(details);
System.out.println("----------------------------------------------");
break;
case '2':
//System.out.println("2.登记收入");
System.out.print("本次收入金额:");
int addMoney=Utility.readNumber();
System.out.print("本次收入说明:");
String addInfo=Utility.readString();
//处理balance变量
balance+=addMoney;
//处理details变量
details+=("收入\t"+balance+"\t\t"+addMoney+"\t\t"+addInfo+"\n");
System.out.println("------------------登记完成--------------------\n");
break;
case '3':
//System.out.println("3.登记支出");
System.out.print("本次支出金额:");
int minusMoney=Utility.readNumber();
System.out.print("本次支出说明:");
String minusInfo=Utility.readString();
//处理balance
if(balance>=minusMoney)
{
balance-=minusMoney;
details+=("支出\t"+balance+"\t\t"+minusMoney+"\t\t"+minusInfo+"\n");
}
else
{
System.out.println("支出超出账户额度,支付失败!");
}
System.out.println("------------------登记完成--------------------\n");
break;
case '4':
//System.out.println("4.退 出");
System.out.print("是否确认退出(Y/N):");
char isExit=Utility.readConfirmSelection();
if(isExit=='Y')
{
isFlag=false;
}
//break;
}
}
}
}
说一下要注意的几个地方:
- 环境变量一定要正确配置
- 一定要正确地安装JDK和JRE
- 安装的JDK版本(32位或64位)必须于eclipse保持一致
- 还有Utility工具类里的readKeyBoard()方法不能漏
以上详细教程均出自于尚硅谷Java教学视频