1

ユーザーが入力した名前のイニシャルとバリエーションを出力する基本的なプログラムを作成しようとしています。基本的なコーディングはできましたが、if-else ステートメントを記述して、ユーザーが名前と姓だけを入力できるようにする方法に行き詰まっています。コードの冒頭は次のとおりです。

Scanner scan=new Scanner (System.in);
System.out.println("What are your first, middle, and last names? ");
String name = scan.nextLine();
String[] partOfName = name.split(" ");

**if ()**
{
  char firstInitial = Character.toUpperCase(partOfName[0].charAt(0));
  char middleInitial= Character.toUpperCase(partOfName[1].charAt(0));
  char lastInitial = Character.toUpperCase(partOfName[2].charAt(0));

  String firstName = partOfName[0].substring(0,1).toUpperCase() + partOfName[0].substring(1);

  String lastName = partOfName[2].substring(0,1).toUpperCase() + partOfName[2].substring(1);

  String middleName = partOfName[1].substring(0,1).toUpperCase() + partOfName[1].substring(1);
  String c_lastName = lastName.toUpperCase();

  System.out.println ("Your Initials Are " + firstInitial + middleInitial + lastInitial);
  System.out.println("Variation one: " + c_lastName + ", " + firstName + " " + middleInitial + ".");
  System.out.println("Variation two: " + lastName+ ", " + firstName + " " + middleName);
}
else
{
  char firstInitial = Character.toUpperCase(partOfName[0].charAt(0));
  char lastInitial = Character.toUpperCase(partOfName[2].charAt(0));
}
4

7 に答える 7

3

入力された単語数をカウントし、

if (partOfName.length == 2){
// only First name and last name
}else if (partOfName.length == 3){
// with middle name
}
于 2013-09-20T16:18:14.653 に答える
1
Scanner scan=new Scanner (System.in);
System.out.println("What are your first, middle, and last names? ");
String name = scan.nextLine();
String[] partOfName = name.split(" ");
int len = partOfName.length;


if( len > 2 )
{
   //If user inputs 4 or more words only first three will be evaluated.

  char firstInitial = Character.toUpperCase(partOfName[0].charAt(0));
  char middleInitial= Character.toUpperCase(partOfName[1].charAt(0));
  char lastInitial = Character.toUpperCase(partOfName[2].charAt(0));

  String firstName = partOfName[0].substring(0,1).toUpperCase() + partOfName[0].substring(1);

  String lastName = partOfName[2].substring(0,1).toUpperCase() + partOfName[2].substring(1);

  String middleName = partOfName[1].substring(0,1).toUpperCase() + partOfName[1].substring(1);
  String c_lastName = lastName.toUpperCase();

  System.out.println ("Your Initials Are " + firstInitial + middleInitial + lastInitial);
  System.out.println("Variation one: " + c_lastName + ", " + firstName + " " + middleInitial + ".");
  System.out.println("Variation two: " + lastName+ ", " + firstName + " " + middleName);
}
else if(len == 2)
{
  char firstInitial = Character.toUpperCase(partOfName[0].charAt(0));
  char lastInitial = Character.toUpperCase(partOfName[1].charAt(0));
}
else if ( len < 2)
{
   System.out.println("Bad input");
}

または、似たようなことを試すことができます

Scanner scan=new Scanner (System.in);
System.out.println("What are your first, middle, and last names? ");
String name = scan.nextLine();
String[] partOfName = name.split(" ");
int len = partOfName.length;
int i=0;
string initials = "";

if(len >= 2) 
{

    for (i=0;i<len;i++)
    {
       initials += Character.toUpperCase(partOfName[i].charAt(0));
    }

    System.out.println ("Your Initials Are " + initials );

}

もう 1 つの方法は、StringTokenizer クラスを使用することです。StringTokenizer をインポートすることを忘れないでください。

import java.util.StringTokenizer; 


Scanner scan=new Scanner (System.in);
System.out.println("What are your first, middle, and last names? ");
String name = scan.nextLine();

StringTokenizer st = new StringTokenizer(name);

String initials = "Your Initials Are: ";


while (st.hasMoreElements()) 
{
    initials += Character.toUpperCase(st.nextElement().charAt(0)));
}

System.out.println( initials );
于 2013-09-20T16:20:23.980 に答える
0

配列のサイズを使用しますpartOfName

if (partOfName.length>=3)
{
 //work with first name, middle name and last name
} else {
 //work with first name and last name
}
于 2013-09-20T16:19:51.857 に答える
0

lengthおそらく配列のプロパティを確認します。

if (partOfName.length > 2) // At least 3 names entered
{

}
else if (partOfName.length == 2) // Two names entered
{

}

また、名前が 1 つしか入力されていないかどうかを確認することもできます。おそらくユーザーはマドンナです。

于 2013-09-20T16:20:01.460 に答える
0
if (partOfName.length == 3)

分割が実際に少なくとも 2 つの部分を持っていることを確認するために、else ステートメントを強化することをお勧めします。

于 2013-09-20T16:20:45.187 に答える
0

まず、設定する前に、

    char firstInitial = Character.toUpperCase(partOfName[0].charAt(0));
    char middleInitial= Character.toUpperCase(partOfName[1].charAt(0));
    char lastInitial = Character.toUpperCase(partOfName[2].charAt(0));

分割後の配列に 3 つの要素があることを確認します。そうしないと、プログラムが失敗します。次に、配列に 2 つの要素があり、ユーザーが自分の名前と姓を入力した場合、firstInitial と lastInitial を設定できると想定できます。配列の長さが 3 の場合、firstInitial、middleInitial、および lastInitial を設定できます

    int len=partOfName.length;

    // If you need to get more than 3, you should need a more generic solution.
    if (len<2 || len>3 )
    System.out.println("Bad input."); // or throw an Exception

    if (len==3){
    //set initials of name, middle and lastname
    }
    else if (len==2) {
    //set initials of name, and lastname
    }
于 2013-09-20T16:22:40.193 に答える
0
if (partOfName.length == 3) {

} else if (partOfName.length == 2) {

} else {
   //deal with exceptions
}
于 2013-09-20T16:19:42.443 に答える