-1

ユーザーが入力した後にさまざまな形式でユーザーの名前を出すコードを書こうとしています。ただし、ユーザーにミドル ネームがない場合、システムはエラーが発生したことを出力する必要があります。私はそれを持っているので、ユーザーが 3 つの名前を入力すると完全に機能しますが、ユーザーが 2 つの名前を入力すると機能しません。これが私のコードです:

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.");
    }
  }
}
4

2 に答える 2

0

これの代わりに:

if (nameParts[2].isEmpty())
{
    System.out.println("No Middle Name Detected");
}

何かのようなもの

if(nameParts.length != 3)
{
    System.out.println("Invalid entry");
}

の方が好ましいかもしれません。

基本的に、名前が 2 つしか入力されていない場合、split()は長さ 2 の配列を返し、その要素はインデックス 0 と 1 でアクセスできます。

しかし、あなたのif条件では、インデックス 2 にアクセスしようとすると、範囲外になる可能性があります (名前を 2 つだけ入力した場合は OOB になります)。

これを解決するには、(a) 自分と同じように試して ArrayIndexOutOfBoundsException をキャッチするか、(b) 分割によって適切なサイズの配列が生成されたことを最初に確認してから、そこから先に進むことができます (これは、私がリストした変更で採用したアプローチでした) )。

(b) をお勧めしますが、どちらのアプローチも問題ないようです。

于 2013-09-18T22:15:15.753 に答える