我正在尝试编写代码,以便在用户输入后以不同格式发出用户名。但是,如果用户没有中间名,系统应打印出错误。我有它,所以如果用户输入三个名称,但如果用户输入两个名称则不起作用,它可以正常工作。这是我的代码:
import java.util.Scanner;
public class Assignment3
{
public static void main(String[] args)
{
String fullName;
Scanner in = new Scanner(System.in);
System.out.print ("What are your first, middle, and last names? ");
fullName = in.nextLine();
System.out.println(fullName);
if (fullName.contains(" "))
{
String[] nameParts = fullName.split(" ");
String firstInitial = nameParts[0].substring(0,1).toUpperCase();
String secondInitial = nameParts[1].substring(0,1).toUpperCase();
String thirdInitial = nameParts[2].substring(0,1).toUpperCase();
if (nameParts[2].isEmpty())
{
System.out.println("No Middle Name Detected");
}
else
{
System.out.println ("Your initials are: " + firstInitial + secondInitial + thirdInitial);
String lastVariationOne = nameParts[2].substring(0, nameParts[2].length());
lastVariationOne = lastVariationOne.toUpperCase();
String firstVariationOne = nameParts[0].substring(0, nameParts[0].length());
firstVariationOne = firstVariationOne.substring(0,1).toUpperCase() + firstVariationOne.substring(1, nameParts[0].length());
System.out.println("Variation One: " + lastVariationOne + ", " + firstVariationOne + " " + secondInitial + ".");
String lastVariationTwo = nameParts[2].substring(0, nameParts[2].length());
lastVariationTwo = lastVariationTwo.substring(0,1).toUpperCase() + lastVariationTwo.substring(1, nameParts[2].length());
System.out.println("Variation Two: " + lastVariationTwo + ", " + firstVariationOne);
}
}
else
{
System.out.println("Wrong. Please enter your name properly.");
}
}
}
答案 0 :(得分:0)
而不是:
if (nameParts[2].isEmpty())
{
System.out.println("No Middle Name Detected");
}
类似
if(nameParts.length != 3)
{
System.out.println("Invalid entry");
}
可能更适合。
基本上,如果输入的名称只有两个,split()
将返回一个长度为2的数组,其元素可以通过索引0和1访问。
但是在if
条件下,您尝试访问索引2,这可能超出范围(对于您只输入两个名称的情况,将为OOB)。
要解决这个问题,你可以(a)像你一样尝试它,但是捕获ArrayIndexOutOfBoundsException或(b)首先检查split产生了一个大小合适的数组,然后从那里开始(这是我采用的方法)改变我列出的。)
我建议(b),但两种方法似乎都很好。
答案 1 :(得分:0)
如果你没输入中间名,那么数组大小是2吗? 所以没有名字部分[2]。 只需检查namespart的大小。 @jedwards jedwards的解决方案就在那里。