- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所示,我正在使用方法编写一个简单的程序,该程序将罗马数字的字符输入在(“M”,“D”,“C”,“L”,“X”,“V”之间转换) ,“I”)然后打印十进制等值。
我已经编写了程序,但它将小数(int)转换为罗马数字
当修改程序以仅接受字符输入(“M”,“D”,“C”,“L”,“X”,“V”,“I”)然后输出十进制时,我收到错误char 无法转换为 int。
关于我如何改变这一点的任何建议。谢谢
import java.util.Scanner;
class RomanNumeral {
public static String romanNumeralToInt(int romanNumeral) {
String Numeral = "";
int repeat;
int value[] = {1000, 500, 100, 50, 10, 5, 1 };
String symbol[] = {"M", "D", "C", "L", "X", "V", "I" };
for(int x = 0; romanNumeral > 0; x++) {
repeat = romanNumeral / value[x];
for(int i = 1; i <= repeat; i++) {
Numeral = Numeral + symbol[x];
}
romanNumeral = romanNumeral % value[x];
}
return Numeral;
}
public static void main(String args[]){
Scanner input = new Scanner(System.in);
final String INVALID = "Invalid number, try again!";
final int VALIDATE_NUMBER_1 = 1;
final int VALIDATE_NUMBER_5 = 5;
final int VALIDATE_NUMBER_10 = 10;
final int VALIDATE_NUMBER_50 = 50;
final int VALIDATE_NUMBER_100 = 100;
final int VALIDATE_NUMBER_500 = 500;
final int VALIDATE_NUMBER_1000 = 1000;
while (true) {
System.out.print("Enter a number: ");
int inputValue = input.nextInt();
if (inputValue == VALIDATE_NUMBER_1) {
System.out.println(VALIDATE_NUMBER_1 + " = " + romanNumeralToInt(1));
}
else if (inputValue == VALIDATE_NUMBER_5) {
System.out.println(VALIDATE_NUMBER_5 + " = " + romanNumeralToInt(5));
}
else if (inputValue == VALIDATE_NUMBER_10) {
System.out.println(VALIDATE_NUMBER_10 + " = " + romanNumeralToInt(10));
}
else if (inputValue == VALIDATE_NUMBER_50) {
System.out.println(VALIDATE_NUMBER_50 + " = " + romanNumeralToInt(50));
}
else if (inputValue == VALIDATE_NUMBER_100) {
System.out.println(VALIDATE_NUMBER_100 + " = " + romanNumeralToInt(100));
}
else if (inputValue == VALIDATE_NUMBER_500) {
System.out.println(VALIDATE_NUMBER_500 + " = " + romanNumeralToInt(500));
}
else if (inputValue == VALIDATE_NUMBER_1000) {
System.out.println(VALIDATE_NUMBER_1000 + " = " + romanNumeralToInt(1000));
}
else {
System.out.println(INVALID);
}
}
}
}
更新按照帖子的建议修改了代码,但仍然存在错误,因为 String 无法转换为 Int。有什么建议。谢谢您
import java.util.Scanner;
class RomanTest {
public static int romanNumeralToInt(char romanNumeral) {
String Numeral = "";
int repeat;
int value[] = {1000, 500, 100, 50, 10, 5, 1 };
char symbol[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I' };
for(char x = 0; romanNumeral > 0; x++) {
repeat = romanNumeral / value[x];
for(int i = 1; i <= repeat; i++) {
Numeral = Numeral + symbol[x];
}
romanNumeral = romanNumeral % value[x];
}
return Numeral;
}
public static void main(String args[]){
Scanner input = new Scanner(System.in);
final String INVALID = "Invalid number, try again!";
final char VALIDATE_CHAR_M = 'M';
final char VALIDATE_CHAR_D = 'D';
final char VALIDATE_CHAR_C = 'C';
final char VALIDATE_CHAR_L = 'L';
final char VALIDATE_CHAR_X = 'X';
final char VALIDATE_CHAR_V = 'V';
final char VALIDATE_CHAR_I = 'I';
while (true) {
System.out.print("Enter a number: ");
char inputValue = input.nextLine().charAt(0);
if (inputValue == VALIDATE_CHAR_M) {
System.out.println(VALIDATE_CHAR_M + " = " + romanNumeralToInt('M'));
}
else if (inputValue == VALIDATE_CHAR_D) {
System.out.println(VALIDATE_CHAR_D + " = " + romanNumeralToInt('D'));
}
else if (inputValue == VALIDATE_CHAR_C) {
System.out.println(VALIDATE_CHAR_C + " = " + romanNumeralToInt('C'));
}
else if (inputValue == VALIDATE_CHAR_L) {
System.out.println(VALIDATE_CHAR_L + " = " + romanNumeralToInt('L'));
}
else if (inputValue == VALIDATE_CHAR_X) {
System.out.println(VALIDATE_CHAR_X + " = " + romanNumeralToInt('X'));
}
else if (inputValue == VALIDATE_CHAR_V) {
System.out.println(VALIDATE_CHAR_V + " = " + romanNumeralToInt('V'));
}
else if (inputValue == VALIDATE_CHAR_I) {
System.out.println(VALIDATE_CHAR_I + " = " + romanNumeralToInt('I'));
}
else {
System.out.println(INVALID);
}
}
}
}
最佳答案
首先你要注意public static int romanNumeralToInt(char romanNumeral)
它应该返回 int,但你返回 String Numeral = "";
- 它是 String,Java 因为 C# 是强类型语言,所以你必须返回 String。第二:以您正在做的方式连接字符串 for(int i = 1; i <= repeat; i++) {
不推荐(太慢,字符串是不可变的,因此在每次连接时都创建新字符串)。更好的方法是使用 StringBuilder。
Numeral = Numeral + symbol[x];
}
我修改了你的代码并提供了类似的内容:
private String decimalToRoman(int number) {
String[] romans = {"M", "CM", "D", "C", "XC", "L", "X", "IX", "V", "I"};
int[] values = {1000, 900, 500, 100, 90, 50, 10, 9, 5, 1};
StringBuilder builder = new StringBuilder();
for (int i = 0; i < values.length; i++) {
int times= number / values[i];
if (times== 0) {
continue;
}
if (times == 4 && i > 0) {
builder.append(romans[i]);
builder.append(romans[i - 1]);
} else {
for (int ii = 0; ii < times; ii ++) {
builder.append(romans[i]);
}
}
number = number % values[i];
}
return builder.toString();
}
关于Java - 将字符输入(表示罗马数字)转换为十进制等值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40829068/
我使用 Pandas 作为数据库替代品,因为我有多个数据库( Oracle 、 SQL Server 等),并且我无法将一系列命令与 SQL 等效。 我在 DataFrame 中加载了一个包含一些列的
使用 dimensional-tf 时包,是否可以使用“普通”Num 实例(即 Int、Double、Integer),而无需使用一个单元? 例如,此代码不进行类型检查(在 ghci 中): {-#
我有很多这样的陈述: INSERT INTO app.organization (name, org_type) VALUES ($1, $2) 在我的代码中。我想捕获它,将其粘贴到
我有很多这样的陈述: INSERT INTO app.organization (name, org_type) VALUES ($1, $2) 在我的代码中。我想捕获它,将其粘贴到
我正在使我的应用与平板电脑兼容,并且我正在尝试了解实现此目的的最佳方式。 我有一个 GridView,每个图像下面都有图像和文本。目前每张图片的高度都设置为 120dp 而不是 wrap_conten
我对 MongoDB 非常陌生,并且使用 jupyter 笔记本从 mongodb 中提取数据。我正在尝试获取 MongoDB 中的前 100 个文档,并且我确实有一种仅获取 100 个文档的粗略方法
我的代码, class User(db.Model, UserMixin): uid = db.Column(db.Integer, primary_key=True) username =
我正在尝试在我的本地机器上启动我的 PostgreSQL 服务器。但是我收到一条错误消息: FATAL: could not create shared memory segment: Invali
我正在使用基于 C++ 的程序,但它有自己的语法。例如,这是我将变量 x 设置为等于 2 的方式: x() = 2; 我从外部文件中读入变量及其初始值。数据存储在两个 vector 中。 vector
我是一名优秀的程序员,十分优秀!