Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java子字符串返回0_Java_Android_Stringbuilder - Fatal编程技术网

Java子字符串返回0

Java子字符串返回0,java,android,stringbuilder,Java,Android,Stringbuilder,我正在开发一个命理学应用程序。。哪里有三个编辑文本用于收集用户的名字、中间名和姓氏。。在这些值中,只取名称的第一位数字,所有这些值都使用字符串生成器追加。。并显示计算结果。。如果用户输入所有的名字、中间名和姓氏,并且对于某些人来说没有中间名,那么当他们进行计算时,应用程序工作正常,就像应用程序崩溃一样。。请帮忙,我正在输入下面的代码 MainActivity.java @Override protected void onCreate(Bundle savedInstanceState)

我正在开发一个命理学应用程序。。哪里有三个编辑文本用于收集用户的名字、中间名和姓氏。。在这些值中,只取名称的第一位数字,所有这些值都使用字符串生成器追加。。并显示计算结果。。如果用户输入所有的名字、中间名和姓氏,并且对于某些人来说没有中间名,那么当他们进行计算时,应用程序工作正常,就像应用程序崩溃一样。。请帮忙,我正在输入下面的代码

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    public void gReport(View V) 
    {
        EditText et1 = (EditText) findViewById (R.id.editText1);
        EditText et2 = (EditText) findViewById (R.id.editText2);
        EditText et3 = (EditText) findViewById (R.id.editText3);
        TextView tv1 = (TextView) findViewById (R.id.textView1);

        long sum2 = 0;

        String firstName = et1.getText().toString();
        String middleName = et2.getText().toString();
        String lastName = et3.getText().toString();
        String aChar1 = firstName.substring(0,1);
        String aChar2 = middleName.substring(0,1);
        String aChar3 = lastName.substring(0,1);

        StringBuilder sb= new StringBuilder();
        sb.append(aChar1);

        sb.append(aChar2);
        sb.append(aChar3);
        String aChar = sb.toString();
        sum2 = getSum(String.valueOf(aChar));


        tv1.setText(String.valueOf(aChar));
        Intent in = new Intent(this, FirstActivity.class);
        in.putExtra("name2",sum2 + "");
        startActivity(in);


    }




    private long getSum(String text) {
        // TODO Auto-generated method stub
        long sum2 = 0;
        char[] name2 = new char[text.length()];

               name2 = text.toCharArray();

               for(int i=0; i<text.length(); i++)
               {
                   sum2 += value2( name2[i] );
                }
                 while (sum2>9)            

               {              

                   sum2 = findDigitSum2(sum2);

               }
        return sum2;
    }

    private long findDigitSum2(long n) {
        // TODO Auto-generated method stub
        int sum2=0;
        while (n != 0) 
        {
         sum2 += n % 10;
         n = n / 10;
        }
        return sum2;
    }

    private long value2(char a) {
        // TODO Auto-generated method stub
        switch(a)
        {
           case 'A':return 1;    
           case 'B':return 2;
           case 'C':return 3;
           case 'D':return 4;
           case 'E':return 5;
           case 'F':return 6;
           case 'G':return 7;
           case 'H':return 8;
           case 'I':return 9;
           case 'J':return 1;
           case 'K':return 2;
           case 'L':return 3;
           case 'M':return 4;
           case 'N':return 5;
           case 'O':return 6;
           case 'P':return 7;
           case 'Q':return 8;
           case 'R':return 9;
           case 'S':return 1;          
           case 'T':return 2;
           case 'U':return 3;
           case 'V':return 4;
           case 'W':return 5;
           case 'X':return 6;
           case 'Y':return 7;
           case 'Z':return 8;
           default:return 0;

        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.firstactivity_xm);







        TextView tv2 = (TextView) findViewById (R.id.textView2);

        tv2.setText(getIntent().getStringExtra("name2"));


}
}

它可能会崩溃,因为中间名字段为空,长度为0,并且您正试图从不存在的索引中获取字符。 在使用substring方法之前,可以使用isEmpty()检查middleName字符串是否为空或至少有1个字符

例如:

String aChar2 = ""; 
if (!middleName.isEmpty())
{
   aChar2 = middleName.subString(0,1);
}

可能是因为以下几行:

String aChar2 = middleName.substring(0,1);
如果middleName为空,则会引发IndexOutOfBoundsException(请参阅


捕获此异常或更好的方法是,在执行子字符串之前检查字符串是否为空。

堆栈跟踪会有所帮助。“我正在开发一个命理学应用程序…”-这是你的错误:-)请给出一个示例字符串aChar2=“”;if(!middleName.isEmpty()){aChar2=middleName.subString(0,1);)String aChar1=“”;if(!firstName.isEmpty()){aChar1=firstName.subString(0,1);}else{}这是正确的,但你不需要其他,因为你在其他方面什么都不做,所以你可以删除它。请调试一点,你现在知道这个理论,你应该能够弄清楚它。而且“现在它不工作”不是描述你的问题的合适方式。什么不工作?你哪里出错了?