2015-09-24 1 views
1

В этом StarWars код имя генератора я получаю выход:Как вы идете от capitize к нижнему регистру в Java, возникли проблемы с моим выходом кода

Пусть сила будет с вами, PatSm BASAN

, когда он должен быть:

Пусть сила будет с вами, Patsm Басан.

вот мой код для справки.

import java.util.Locale; 
import java.util.Scanner; 

public class Assignment2 { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.printf("Enter your first name: "); 
     String firstname = input.nextLine().substring(0,3); 
     firstname = firstname.substring(0,1).toUpperCase() + firstname.substring(1).toLowerCase(); 

     System.out.printf("Enter your last name: "); 
     String lastname = input.nextLine().substring(0,2); 
     lastname = lastname.substring(0,1).toUpperCase() + lastname.substring(1).toLowerCase(); 

     System.out.printf("Enter your mother's maiden name: "); 
     String mothersname = input.nextLine(); 
     mothersname = mothersname.substring(0,2); 

     System.out.printf("Enter the name of the city in which you were born: "); 
     String cityname = input.nextLine(); 
     cityname = cityname.substring(0,3); 

     String StarWarsName = firstname+lastname+" "+mothersname+cityname; 
     System.out.println("May the force be with you, " + StarWarsName); 
    } 
} 
+0

Часть решения есть, ваша цель? –

ответ

1

Посмотрите, что вы делаете с каждой строкой, когда вы их читаете.

firstname = firstname.substring(0,1).toUpperCase() + firstname.substring(1).toLowerCase(); 

Это дает вам полное имя в нижнем регистре, кроме первой буквы. Это хорошо.

Но и здесь вы принимаете всю фамилию в нижнем регистре, кроме первой буквы. Но это не то, что вам нужно - потому что эта часть будет в середине вашего названия звездных войн. Вместо этого используйте:

lastname = lastname.toLowerCase(); 

Теперь имя матери:

mothersname = mothersname.substring(0,2); 

Капитализация будет зависеть от того, заключал ли или нет пользователь имя матери капитализируются. Таким образом, вы действительно должны использовать что-то вроде:

mothersname = mothersname.substring(0,1).toUpperCase() + mothersname.substring(1,2).toLowerCase(); 

Наконец, город:

cityname = cityname.substring(0,3); 

Опять же, капитализация зависит от того, входил ли пользователь его с капиталом или нет (что он, вероятно, сделал), и вы хотите, чтобы все было строчным, потому что оно будет объединено с частью имени матери. Итак:

cityname = cityname.substring(0,3).toLowerCase(); 

После того, как вы сделаете все эти исправления, ваше имя в конце концов будет хорошо.

+0

Спасибо, просто запустил его, я изменил 'mothersname.substring (0,1) .toUpperCase() + mothersname.substring (1,1) .toLowerCase();' to 'mothersname.substring (0,1) .toUpperCase() + mothersname.substring (1,2) .toLowerCase(); ' – javakook

+0

@patm Ах, да, моя ошибка. – RealSkeptic

+0

Спасибо за помощь .. застрял в этом вопросе довольно давно – javakook

2

Вы вызываете Lastname начинать с заглавной буквой, используя toUpperCase() по первой букве его.

Вы можете легко исправить случаи для переменной StarWarsName. Попытайтесь:

String correctName = ""; 
for (int i = 0; i < starWarsName.length(); i++) { 
    if (i == 0 || starWarsName.charAt(i - 1) == ' ') 
     correctName += starWarsName.substring(i, i + 1).toUpperCase(); 
    else 
     correctName += starWarsName.substring(i, i + 1).toLowerCase(); 
} 

Также следует начинать имена переменных с строчной буквы. ;)

+0

попробовал, и я получил ошибку 'Не могу вызвать toLowerCase() на примитивном типе char' – javakook

+0

А, мой плохой. Вместо этого используйте 'starWarsName.substring (i, i + 1) .toLowerCase()'. – Cr0w3

+0

Да, мне вряд ли нужно использовать манипуляции с строкой с помощью 'toLowerCase()' или 'toUpperCase()', поэтому я полностью не замечал этого факта. Я обновил свой ответ, чтобы он теперь работал. – Cr0w3

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