当前位置: 首页 > 知识库问答 >
问题:

Android studio不接受字符串。当我想从edittext向类中放入字符串时

仲孙铭
2023-03-14

我评论了它停止工作的地方,有人能帮忙吗!这个代码是一个罗马数字转换器。我把号码打给了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;
    }

        }

共有1个答案

盖弘毅
2023-03-14

似乎方法中的值被解释为资源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来比较两个对象的值。 使用代替。这是原始的,因此可以使用。