Java 我的申请有什么问题?你能给我一个很好的解释吗

Java 我的申请有什么问题?你能给我一个很好的解释吗,java,Java,我找不到代码有什么问题。请你给我解释一下。我正在调试这个。我找不到这个问题。我正在尝试修复整个代码如果在testname中找不到空格字符,此代码没有考虑到posBlank可以是-1。如果它是-1,则仍执行此行: public class PersonName { int NumberNames(String wholename) { // store the name passed in to the method String testname=who

我找不到代码有什么问题。请你给我解释一下。我正在调试这个。我找不到这个问题。我正在尝试修复整个代码

如果在
testname
中找不到空格字符,此代码没有考虑到
posBlank
可以是
-1
。如果它是
-1
,则仍执行此行:

public class PersonName {


    int NumberNames(String wholename)
    {    // store the name passed in to the method
        String testname=wholename;
         // initialize number of names found
        int numnames=0;
         // on each iteration remove one name
        while (testname.length()>0)
        {   // take the "white space" from the beginning and end
           testname = testname.trim();
            // determine the position of the first blank
            // .. end of the first word
           int posBlank= testname.indexOf(' ');
          // cut off word
           testname=testname.substring(posBlank+1,testname.length());
          //  System.out.println(numnames);
          // System.out.println(testname);
           numnames++;
        }    
        return numnames;
    }


    public static void main(String args[])
    {
        PersonName One= new PersonName();

        System.out.println(One.NumberNames("Bobby"));
        System.out.println(One.NumberNames("Bobby Smith"));
        System.out.println(One.NumberNames("Bobby L. Smith"));
        System.out.println(One.NumberNames("  Bobby  Paul Smith Jr.  "));



    }
}
表达式
posBlank+1
0
,因此字符串不变。这将导致无限循环


如果
posBlank
-1
,则在
循环时计算最后一个单词并中断

问题是如果未找到空格,它将返回-1

testname=testname.substring(posBlank+1,testname.length());
posBlank将变为-1,导致
posBlank+1=0
,并使while循环变为无限循环

您可以这样尝试:

int posBlank= testname.indexOf(' ');

请解释为什么你认为你的代码是错误的。你期望得到什么?这个程序是用一个循环编写的,该循环试图一次从字符串中提取一个名称,并在过程中计算名称。当它删除所有名称时,循环停止。。。但是循环不会停止。。。但是它不
我不知道这意味着什么。那么,如果posBlank是-1,会发生什么呢?这会发生吗?;)您对所有4种情况的预期输出是多少?正确。但我想知道,当涉及到像这样的琐事时,给出答案是否始终是w.r.t.教学的最佳选择:/你知道在这件事上有任何官方的指导方针/立场吗?@DiegoMartinoia对于看起来像家庭作业的问题,我引导OP找到正确的解决方案,但我没有给出实际的代码解决方案。我明白了。试图找到最佳策略来应用自己:)
int NumberNames(String wholename)
    {    
        wholename = wholename.trim();
        String[] names = wholename.split(" ");
        int numNames = 0;

        for(String name : names){
            if(!name.equals("")){
                numNames++;
            }
        }
        return numNames;
    }