谁能帮我解释下这个java程序代码呀?

程序说明:将输入的罗马字母传换成十进制的数字,然后输出!M代表1000,D代表500,C代表100,L代表50,X代表10,V代表5,I代表1。例如输入字母XVII=X+... 程序说明:将输入的罗马字母传换成十进制的数字,然后输出!M代表1000,D代表500,C代表100,L代表50,X代表10,V代表5,I代表1。 例如输入字母XVII=X + V + I + I = 10 + 5 + 1 + 1 = 17。有三个文件:RomanException.java,Roman.java,TestRoman.java。
--------------------------------------------第一个文件
import java.util.*;
class RomanException extends Exception{
private String s;
private int i;
public RomanException(String ss,int ii){
this.s = ss;
this.i = ii;
}
public String getNewNum(){
System.out.println("### Symbol " + s.charAt(i)+ " is not a valid Roman numeral");
System.out.print("Do you want to convert another number (y/n)?");
String str = new Scanner(System.in).nextLine();
if (str.equals("y")) {
System.out.print("Enter a Roman numeral?");
return new Scanner(System.in).nextLine();
}
else System.exit(1);
return null;
}
}
---------------------------------------第二个
public class Roman{
public static String getNum(String s){
int count = 0;
for (int i = 0; i < s.length(); i++) {
switch (s.toLowerCase().charAt(i)) {
case 'm':
count += 1000;
break;
case 'd':
count += 500;
break;
case 'c':
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'd') {
count += 400;
i++;
break;
}
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'm') {
count += 900;
i++;
break;
}
count += 100;
break;
case 'l':
count += 50;
break;
case 'x':
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'c') {
count += 90;
i++;
break;
}
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'l') {
count += 40;
i++;
break;
}
count += 10;
break;
case 'v':
count += 5;
break;
case 'i':
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'x') {
count += 9;
i++;
break;
}
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'v') {
count += 4;
i++;
break;
}
count += 1;
break;
default :
try {
throw new RomanException(s,i);
} catch (RomanException e) {
return getNum(e.getNewNum());
}
}
}
return "The decimal value of " + s + " is " + count;
}
}
----------------------------------------------第三个文件
import java.util.*;

public class TestRoman {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter a Roman numeral?");
String s = scan.nextLine();
System.out.println(Roman.getNum(s));
System.out.print("Do you want to convert another number (y/n)?");
String str = scan.nextLine();
if (str.equals("y")) {
main(null);
} else {
System.exit(1);
}
}
}
我刚刚学java程序,谁能帮我解释一下这个程序,最好在每一行代码上面加上注释,好让我弄懂程序的每一个步骤起到的作用。
谢谢大家帮忙了!
展开
 我来答
财迷社
2009-08-28 · 超过24用户采纳过TA的回答
知道答主
回答量:94
采纳率:100%
帮助的人:39.6万
展开全部
--------------------------------------------第一个文件

import java.util.*;
class RomanException extends Exception{

private String s;
private int i;

//构造函数
public RomanException(String ss,int ii){
this.s = ss;
this.i = ii;
}
public String getNewNum(){
//根据传过来的字符串和不符合的字符的位置,输出相关的信息
System.out.println("### Symbol " + s.charAt(i)+ " is not a valid Roman numeral");
//询问用户是否继续使用
System.out.print("Do you want to convert another number (y/n)?");
//取得用户输入的信息
String str = new Scanner(System.in).nextLine();
//如果是y时,表示用户将继续使用
if (str.equals("y")) {
//提示输入罗马字符
System.out.print("Enter a Roman numeral?");
//返回用户输入的罗马字符
return new Scanner(System.in).nextLine();
}
//否则退出程序
else System.exit(1);
return null;
}
}

---------------------------------------第二个
public class Roman{
public static String getNum(String s){

//首先将加法器的总和计为0
int count = 0;
//解析用户输入的罗马字母
for (int i = 0; i < s.length(); i++) {

//将此字符转换为小写,并进行匹配
switch (s.toLowerCase().charAt(i)) {
//字母为m时,加1000
case 'm':
count += 1000;
break;
//字母为d时,加500
case 'd':
count += 500;
break;

case 'c':
//字母为c时,并且不是最后一位字母且c的下一个字母是d时,加400;此时跳过d(即不再重复计算d的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'd') {
count += 400;
i++;
break;
}
//字母为c时,并且不是最后一位字母且c的下一个字母是m时,加900;此时跳过m(即不再重复计算m的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'm') {
count += 900;
i++;
break;
}
//不符合前面两项,则加100
count += 100;
break;
//字母为l时,加50
case 'l':
count += 50;
break;
//字母为x时
case 'x':
//字母为x时,并且不是最后一位字母且c的下一个字母是c时,加90;此时跳过c(即不再重复计算c的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'c') {
count += 90;
i++;
break;
}
//字母为x时,并且不是最后一位字母且c的下一个字母是l时,加40;此时跳过l(即不再重复计算l的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'l') {
count += 40;
i++;
break;
}
//不符合前面两项,则加10
count += 10;
break;
//字母为v时,加5
case 'v':
count += 5;
break;
//字母为i
case 'i':
//字母为i时,并且不是最后一位字母且i的下一个字母是x时,加9;此时跳过x(即不再重复计算x的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'x') {
count += 9;
i++;
break;
}
//字母为i时,并且不是最后一位字母且i的下一个字母是v时,加4;此时跳过v(即不再重复计算v的值)
if (i != (s.length() - 1)
&& s.toLowerCase().charAt(i + 1) == 'v') {
count += 4;
i++;
break;
}
//不符合前面两项,则加1
count += 1;
break;
default :
//输入的字母不在以上所列的字母中,则抛出错误
try {
//处理异常,将字符串和错误字符的位置传给处理异常的类
throw new RomanException(s,i);
} catch (RomanException e) {
//e.getNewNum取得用户重新输入的罗马字符
return getNum(e.getNewNum());
}
}
}

//所有的字母都在所要求的范围中,则返回最后的计算结果
return "The decimal value of " + s + " is " + count;
}
}

----------------------------------------------第三个文件
import java.util.*;

public class TestRoman {
public static void main(String args[]) {

//使用户能够从 System.in 中读取一个数
Scanner scan = new Scanner(System.in);

//提示用户输入罗马字母
System.out.print("Enter a Roman numeral?");

//接收用户输入的字母
String s = scan.nextLine();

//调用类Roman中的方法getNum处理用户输入的罗马字符,并输出字符的总和
System.out.println(Roman.getNum(s));

//提示用户是否继续使用
System.out.print("Do you want to convert another number (y/n)?");

//接收用户的输入
String str = scan.nextLine();

//用户输入‘y’时表示需要继续使用,继续调用主函数
if (str.equals("y")) {
main(null);
} else {
//否则退出程序
System.exit(1);
}
}
}

希望对你有帮助哦
loveweizaiwan
2009-08-29 · TA获得超过425个赞
知道小有建树答主
回答量:460
采纳率:0%
帮助的人:272万
展开全部
上楼的说的有道理,花费二十分钟,才得那点分,划不来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花未棉
2009-08-28 · TA获得超过918个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:178万
展开全部
刚学java吗?你就别勉强自己了吧,花两个月的时间好好把基础打牢。每天用6个小时看基础java和敲程序。建议你看看马士兵和孙鑫的教程,对java初学者的入门很有帮助。直接看一个复杂的代码,根本都学习不到什么。就拿简单的变量修饰来说,这次出现的是Private 下次出现public static abstract等等,你会区分么,所以从基础来学习吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友388688327
2009-08-28 · TA获得超过1053个赞
知道小有建树答主
回答量:1297
采纳率:0%
帮助的人:965万
展开全部
你这程序写的也太复杂了吧?
我记得你问这个问题的时候我也给你写了,一共不到60行代码,所有功能都有,晕
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
c85602732
2009-08-29 · 超过16用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:0
展开全部
20分估计没人愿意读。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式