2013-09-20 2 views
1

Я пытаюсь написать базовую программу, которая выводит инициалы и варианты имени пользователя. У меня есть базовое кодирование, но я зациклился на том, как написать инструкцию if-else, которая позволит пользователю вводить только первое и последнее имя без середины. Вот начало кода:Если инструкции 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)); 
} 

ответ

3

Количество количество слов вошли,

if (partOfName.length == 2){ 
// only First name and last name 
}else if (partOfName.length == 3){ 
// with middle name 
} 
0
if (partOfName.length == 3) { 

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

} else { 
    //deal with exceptions 
} 
0

использовать размер массива partOfName.

if (partOfName.length>=3) 
{ 
//work with first name, middle name and last name 
} else { 
//work with first name and last name 
} 
+0

array.length является окончательным поле, а не метод – kajacx

+1

@kajacx: ​​мой плохой помощник .. спал .. исправлюсь .. :) –

0

Я бы, скорее всего, проверил бы свойство length свойства массива.

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

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

} 

Вы также можете проверить, было ли введено только одно имя. Возможно, это Мадонна.

+0

Я получаю сообщение об ошибке: не могу найти символ. Должно ли это вместо name.length? – user2799775

+0

Вы хотите убедиться, что массив 'partOfName' имеет длину 3 или более, чтобы убедиться, что вход (' name') был разделен на 3 или более частей. –

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); 

} 

Другой способ заключается в использовании StringTokenizer class.don't забудьте импортировать 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); 
+0

Возможно, вы не захотите иметь 'partOfName.length> 2', потому что пользователь может ввести 4 имени. Я не думаю, что он хотел бы разобрать это. – Rohan

+1

@RoK проблем нет. Логика касается только первых трех слов. Четвертый - игнорируется. – zkanoca

+0

Вы хотите сделать условия настолько тугими, насколько это возможно. Код может выглядеть ошибочным. – Rohan

0
if (partOfName.length == 3) 

Вы можете повысить ваше другое заявление, чтобы убедиться, что раскол действительно получил как минимум 2 части

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)); 

Убедитесь, что массив у вас есть после разделения состоит из трех элементов. В противном случае ваша программа завершится неудачей. Тогда вы можете предположить, что если массив имеет два элемента, пользователь ввел свое имя и фамилию, тогда вы можете установить firstInitial и lastInitial. если длина массива составляет три, то вы можете установить 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 
    } 
+0

Можете ли вы привести мне пример? Думаю, я понимаю, что вы говорите, но не 100% – user2799775

+0

дубликат: http://stackoverflow.com/questions/18883130/first-last-and-sometime-middle-name-detection-java?rq=1 – tmr

Смежные вопросы