我对编程很陌生,我正在编写这段代码,以便在遇到空格时将字符串(长度)计算到一个点。目的是 - 当用户输入他/她的名字和姓氏时,程序应该从姓氏中拆分姓名并计算姓名(和姓氏)中有多少个字母/字符。
我的代码似乎没有达到/执行“ if-statement ”,如果我输入两个以空格分隔的字符串(name& surname)(输出) :你的名字是:(空格),它有0个字母。但是,如果我只输入一个字符串 if-statement ,它就会被执行。
我做错了什么?
我的示例代码:
this
答案 0 :(得分:1)
if(nameAndSurname.indexOf(x) == space)
这条线没有按照你的想法行事。
它从x的索引中获取一个char(字符),并将其与space的值进行比较。空格是一个整数,因此您将位置x处的字符与第一个空格的整数位置进行比较。在这种情况下,位置x处的字母被转换为整数,然后与第一个空格的实际数字值进行比较!
要修复程序,请用此替换整个if语句。
if (nameAndSurname.charAt(x) == ' ') //if there is a space
{
count = c-1; //how many characters/letters was there before space
System.out.println(count);
}
额外:
由于你解决这个问题的方式有点矫枉过正,我在下面发布了另一个解决方案,以更容易阅读的方式解决它。如果放入多于或少于1个空间,也不会破坏。
Scanner scan = new Scanner(System.in);
String nameAndSurname;
System.out.println("Enter your full name please:");
nameAndSurname = scan.nextLine().trim();
int indexOfFirstSpace = nameAndSurname.indexOf(' ');
if (indexOfFirstSpace > -1) {
String firstName = nameAndSurname.substring(0, indexOfFirstSpace);
System.out.println("Your first name is " + firstName.toUpperCase());
System.out.println("It is " + firstName.length() + " characters long.");
}
答案 1 :(得分:1)
为什么要烦扰所有代码?只需跳过for循环,就可以了
if (space != -1) nameOnly = nameAndSurname.substring(0,space);
如果你真的想知道字母的数量,那就是 空间+ 1
不需要那些复杂的东西。
答案 2 :(得分:0)
您可以在开始循环之前验证字符串是否有空格,如下所示:
public class Initials {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String nameAndSurname, nameOnly;
int c = 0, count = 0;
System.out.println("Enter your full name please:");
nameAndSurname = scan.nextLine();
int space = nameAndSurname.indexOf(' ');
if(space == -1) {
System.out.println("Your name has no spaces");
} else {
for(int x = 0; x<nameAndSurname.length(); x++) {
c++;
if(nameAndSurname.indexOf(x) == space) //if there is a space
{
count = c; //how many characters/letters was there before space
System.out.println(count);
}
}
nameOnly = nameAndSurname.substring(0, count);
System.out.println("Your name is: " + nameOnly.toUpperCase() + " and it has " + count + " letters");
}
scan.close();
}