我评论了它停止工作的地方,有人能帮忙吗!这个代码是一个罗马数字转换器。我把号码打给了roman,但roman打给了号码,应用程序崩溃了。如果有人知道代码崩溃的原因或方式,请lmk,以及如何修复它!我已经连续8个小时在做这件事了,但仍然找不到问题所在。我是android studio的新手,这也可能是原因。谢谢
Logcat错误:
2022-01-27 13:27:33.286 1575-1575/com.example.numeralromancalculator E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.numeralromancalculator, PID: 1575
android.content.res.Resources$NotFoundException: String resource ID #0x5
at android.content.res.Resources.getText(Resources.java:444)
at android.widget.TextView.setText(TextView.java:6412)
at com.example.numeralromancalculator.MainActivity$1.onClick(MainActivity.java:54)
at android.view.View.performClick(View.java:7448)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1131)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
convertToNum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//converter class is called
converter cn = new converter();
//checks if input is int or not
boolean digitCheck = TextUtils.isDigitsOnly(inputRoman.getText());
//App Crashes HERE
if (digitCheck == false){
//the input from the user
String theRom = inputRoman.getText().toString();
//string output to user
int outputNum = cn.romanToInteger(theRom);
//outputs number to roman conversion
numOutput.setText(outputNum);
}else{
//statement to print to screen
String reTry = "Invalid: Try Again";
//Outputs that users input is not valid
numOutput.setText(reTry);
}
}
});
//If Convert tto Roman button is clicked
convertToRoman.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//converter class is called
converter nc = new converter();
//checks if input is int or not
boolean digitCheck = TextUtils.isDigitsOnly(inputNum.getText());
if (digitCheck == true){
//the input from the user
int theNumber = Integer.parseInt(inputNum.getText().toString());
//string output to user
String theRoman = nc.toRoman(theNumber);
//outputs number to roman conversion
romanOutput.setText(theRoman);
}else{
//statement to print to screen
String reTry = "Invalid: Try Again";
//Outputs that users input is not valid
romanOutput.setText(reTry);
}
}
});
}
}
public class converter {
public String toRoman(int numberInput) {
//checks if integer conversion is possible
if (numberInput < 1 || numberInput > 3999) {
return "Sorry, Not Possible";
}
//Roman letter total
String returnValue = "";
//while statements to check for roman letters, and adds to total
//descending order
while (numberInput >= 1000) {
returnValue += "M";
numberInput -= 1000;
}
while (numberInput >= 900) {
returnValue += "CM";
numberInput -= 900;
}
while (numberInput >= 500) {
returnValue += "D";
numberInput -= 500;
}
while (numberInput >= 400) {
returnValue += "CD";
numberInput -= 400;
}
while (numberInput >= 100) {
returnValue += "C";
numberInput -= 100;
}
while (numberInput >= 90) {
returnValue += "XC";
numberInput -= 90;
}
while (numberInput >= 50) {
returnValue += "L";
numberInput -= 50;
}
while (numberInput >= 40) {
returnValue += "XL";
numberInput -= 40;
}
while (numberInput >= 10) {
returnValue += "X";
numberInput -= 10;
}
while (numberInput >= 9) {
returnValue += "IX";
numberInput -= 9;
}
while (numberInput >= 5) {
returnValue += "V";
numberInput -= 5;
}
while (numberInput >= 4) {
returnValue += "IV";
numberInput -= 4;
}
while (numberInput >= 1) {
returnValue += "I";
numberInput -= 1;
}
//return a string value of the numeral
return returnValue;
}
//APP CRASHES USING THIS CLASS
public int romanToInteger(String roman) {
int number = 0;
for (int i = 0; i < roman.length(); i++) {
char c = roman.charAt(i);
switch (c) {
case 'I':
number = (i != roman.length() - 1 && (roman.charAt(i + 1) == 'V' || roman.charAt(i + 1) == 'X'))
? number - 1
: number + 1;
break;
case 'V':
number += 5;
break;
case 'X':
number = (i != roman.length() - 1 && (roman.charAt(i + 1) == 'L' || roman.charAt(i + 1) == 'C'))
? number - 10
: number + 10;
break;
case 'L':
number += 50;
break;
case 'C':
number = (i != roman.length() - 1 && (roman.charAt(i + 1) == 'D' || roman.charAt(i + 1) == 'M'))
? number - 100
: number + 100;
break;
case 'D':
number += 500;
break;
case 'M':
number += 1000;
break;
}
}
return number;
}
}
似乎方法中的值被解释为资源ID,因此请确保类型为String:
//string output to user
String outputNum = Integer.toString(cn.romanToInteger(theRom));
//outputs number to roman conversion
numOutput.setText(outputNum);
问题内容: 使用Python 3.3和pySerial进行串行通信。 我正在尝试向COM PORT写入命令,但是write方法不会占用我的字符串。(大多数代码都来自此处。使用pySerial包的完整示例 这是怎么回事? 错误发生在ser.write(“%01#RDD0010000107 ** \ r”)处,在该处获取回溯,就像此数据= to_bytes(data)b.append(item)Typ
当我尝试对输入进行限制时,我在java中遇到了很多麻烦。在此示例中,我需要字符串代码仅接受和等符号。我如何检查以确保没有数字、字母或其他符号?谢谢
问题内容: 我有一个EditText,它将用于浮点数。所以我试图从EditText读取文本并将其放入float变量中。但我似乎有文字悬而未决的问题。这是我的行: 我试过使用Float.parseFloat(string)和只是一般的铸造,但似乎什么也没有做。我在这里可以做什么?另外,有没有一种方法可以在将有效的浮点数写入变量之前检查其有效性? 问题答案: 试试这个。 如果包装器类将字符串转换为浮点
任何人都可以帮我解决这个问题。我接受三个输入:整数、双精度和字符串,但Scanner类不接受字符串值
我很难在我的android应用程序中处理编辑文本的输入。我正在输入小数点值,我已经处理了小数点,但是当我移除EditText的所有内容时,我的应用程序崩溃了。我在EditText小部件的onTextChanged函数中检查了NULL或“”的值,但是这个值被超越了。以下是我的相关功能: 我的logcat: 我担心的是我被告知无效的双倍是“”,然而我正在检查这样的事件... 谢谢你的帮助!
问题内容: String[] letters = {“A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “L”}; 为什么是 Fk呀! 输入AL字母之一绝对不会发生? 问题答案: 字符串是对象。所述通过引用,而不是由它们的内部值进行比较的对象。 有两种解决方案: 使用method来比较两个对象的值。 使用代替。这是原始的,因此可以使用。