Я провел день, работая над этими двумя классами. Я пришел дальше, чем ожидал, но все же не хочу сказать, что у меня проблемы.Помощь в настройке строк
В основном я должен взять введенную строку и вернуть только буквы верхнего регистра, каждую вторую букву, всю строку, но со всеми гласными, обмениваемыми с подчеркиванием, количеством гласных в строке и, наконец, положениями всех гласных в строка.
Я специально разработал свой класс тестера, я считаю правильным, чтобы иметь меню, чтобы попробовать каждую команду отдельно, чтобы я мог протестировать каждую из них.
Это класс тестер ..
//******************************************
// LetterTest.java
// Written by Sanchez
// 2013
//*******************************************
//===========================================
// This program tests the CharAPI class.
//===========================================
import java.util.Scanner;
public class LetterTest {
public static void main(String[] args){
//create Scanner for user input
Scanner in = new Scanner(System.in);
//get user input
System.out.println("Please enter a string of letters");
String input = in.nextLine();
System.out.println("\nChoose an option: "
+"\n1 - Uppercase, "
+"\n2 - Every Second Letter, "
+"\n3 - Replace vowels "
+"\n4 - Number of vowels "
+"\n5 - Positions of vowels");
int choice = in.nextInt();
//Call the method based on user choice
if (choice == 1) {
//each method returns a String
System.out.println(LetterAPI.bigLetters(input));
}
else if (choice ==2) {
System.out.println(LetterAPI.secondLetter(input));
}
else if (choice ==3) {
System.out.println(LetterAPI.vowelsGone(input));
}
else if (choice ==4) {
System.out.println(LetterAPI.vowelNumber(input));
}
else {
System.out.println(LetterAPI.vowelPositions(input));
}
}
}
Это, кажется, работает очень хорошо, и я доволен этим.
Проблема, с которой я сталкиваюсь, находится в моем классе с объектами, которые выполняют манипуляции Я использовал // для пары вещей, чтобы я мог ее скомпилировать. 1, 2 и 4, прямо не возвращают ничего. Третий только обменяет последнее письмо на символ подчеркивания, даже если он не является гласным, а пятый работает очень хорошо, за исключением того, что я хотел бы добавить 1 ко всем номерам, чтобы результаты начинались с 1, а не 0. Я понимаю, что здесь много чего происходит, но я провел день на этом и, наконец, заявляю, что мне очень нужна помощь.
Это код для объектов ...
//******************************************
// LetterAPI.java
// Written by Sanchez
// 2013
//*******************************************
//===========================================
// Objects of this class manipulate an inputted string.
//===========================================
import java.util.Scanner;
//contains a set of methods for maniuplaing the string
public class LetterAPI {
//print only uppercase letters
public static String bigLetters(String input) {
String result = "";
for (int i = 0; i <input.length(); i++) {
char currentLetter=input.charAt(i);
if (Character.isUpperCase(currentLetter))
result = result;
}
return result;
}
//print every second letter
public static String secondLetter(String input) {
String result = "";
for (int i = 0; i <input.length(); i++) {
//result = input.charAt(input);
}
return result;
}
//all vowels replaced by underscores
public static String vowelsGone(String input) {
String result ="aeiouAEIOU";
for (int i = 0; i<result.length();i++) {
result=input.replace(result.charAt(i), '_');
}
return result;
}
//the numbers of vowels
public static String vowelNumber(String input) {
String result = "";
for (int i = 0; i <input.length(); i++) {
if (Character.toLowerCase(input.charAt(i)) == 'a' || Character.toLowerCase(input.charAt(i)) == 'e' || Character.toLowerCase(input.charAt(i)) == 'i' || Character.toLowerCase(input.charAt(i)) == 'o' || Character.toLowerCase(input.charAt(i)) == 'u') {
i++;
}
}
return result;
}
//the positions of all vowels
public static String vowelPositions(String input) {
String result = "";
for (int i = 0; i <input.length(); i++) {
if (Character.toLowerCase(input.charAt(i)) == 'a' || Character.toLowerCase(input.charAt(i)) == 'e' || Character.toLowerCase(input.charAt(i)) == 'i' || Character.toLowerCase(input.charAt(i)) == 'o' || Character.toLowerCase(input.charAt(i)) == 'u') {
result = result + i + " ";
}
}
return result;
}
}
=== UPDATE ===
Спасибо всем! Я добился определенного прогресса, благодарю Бога. Я занял 3-е и 4-е место. Первый из них давал только последний прописной, но теперь повторяет мой ввод. Второй - просто возвращает мне 1-е письмо. Что касается последнего, я пробовал скобки, но я, казалось, сломал его, поэтому я положил его обратно. Это не так важно, хотя это работает! Если я не смогу это понять, мне нужно будет записать заметку о том, что счет начинается с 0. Но первые два меня убивают ... по крайней мере, компилируются. Вот где я нахожусь до сих пор ...
//******************************************
// LetterAPI.java
// Written by Sanchez
// 2013
//*******************************************
//===========================================
// Objects of this class manipulate an inputted string.
//===========================================
import java.util.Scanner;
//contains a set of methods for maniuplaing the string
public class LetterAPI {
//print only uppercase letters
public static String bigLetters(String input) {
String result = "";
char cl;
for (int i = 0; i <input.length(); i++) {
cl=input.charAt(i);
if (Character.isUpperCase(cl))
input = input + cl;
}
return input;
}
//print every second letter
public static String secondLetter(String input) {
String result = "";
for (int i=0; i<input.length(); i+=2) {
input = input + input.charAt(i) + " ";
}
return input;
}
//all vowels replaced by underscores
public static String vowelsGone(String input) {
String vowels ="aeiouAEIOU";
for (int i = 0; i<vowels.length();i++) {
input=input.replace(vowels.charAt(i), '_');
}
return input;
}
//the numbers of vowels
public static String vowelNumber(String input) {
String result = "";
int count = 0;
for (int i = 0; i <input.length(); i++) {
if (Character.toLowerCase(input.charAt(i)) == 'a' || Character.toLowerCase(input.charAt(i)) == 'e' || Character.toLowerCase( input.charAt(i)) == 'i' || Character.toLowerCase(input.charAt(i)) == 'o' || Character.toLowerCase(input.charAt(i)) == 'u') {
count++;
result = count + " ";
}
}
return result;
}
//the positions of all vowels
public static String vowelPositions(String input) {
String result = "";
for (int i = 0; i <input.length(); i++) {
if (Character.toLowerCase(input.charAt(i)) == 'a' || Character.toLowerCase(input.charAt(i)) == 'e' || Character.toLowerCase(input.charAt(i)) == 'i' || Character.toLowerCase(input.charAt(i)) == 'o' || Character.toLowerCase(input.charAt(i)) == 'u') {
result = result + i + " ";
}
}
return result;
}
}
'bigLetters': Что вы думаете, результат' result = result' будет делать? Что вы хотите сделать вместо этого? 'secondLetter': Третье выражение в' for' - это то, что программа будет делать каждый раз через цикл. Часто это что-то вроде 'i ++', что означает «добавить 1 в' i' ». Но этого не должно быть. Можете ли вы придумать что-то, кроме «i ++», которое могло бы сделать то, что вам нужно? – ajb
'vowelsGone': вы устанавливаете' result' в строку гласных. В первый раз через цикл вы используете 'result' для получения гласного, тогда вы меняете' result' на что-то другое. Второй раз, 'результат 'все еще будет строкой гласных? Если нет, как вы собираетесь получить гласный, который вам нужен? 'vowelNumber': вам нужно целое число' i', которое проходит через строку, и вам нужно другое целое число, чтобы сохранить счет. Вы не можете использовать 'i' для обоих одновременно. Кроме того, я рекомендую изменить 'vowelNumber', чтобы он возвращал' int'. – ajb
'vowelPositions': Вы говорите, что хотите добавить 1 к своим ответам перед добавлением в строку. Отлично, просто сделай это. Просто имейте в виду, что 'result = result + i + 1 +" "' не будет работать, потому что первый * добавляет * 'i' к' result' как строку, затем добавляет '1' к' result' как строка. Скобки помогут. – ajb