2013-10-07 3 views
0

Я провел день, работая над этими двумя классами. Я пришел дальше, чем ожидал, но все же не хочу сказать, что у меня проблемы.Помощь в настройке строк

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

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

Это класс тестер ..

//****************************************** 
// 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; 

} 
} 
+0

'bigLetters': Что вы думаете, результат' result = result' будет делать? Что вы хотите сделать вместо этого? 'secondLetter': Третье выражение в' for' - это то, что программа будет делать каждый раз через цикл. Часто это что-то вроде 'i ++', что означает «добавить 1 в' i' ». Но этого не должно быть. Можете ли вы придумать что-то, кроме «i ++», которое могло бы сделать то, что вам нужно? – ajb

+0

'vowelsGone': вы устанавливаете' result' в строку гласных. В первый раз через цикл вы используете 'result' для получения гласного, тогда вы меняете' result' на что-то другое. Второй раз, 'результат 'все еще будет строкой гласных? Если нет, как вы собираетесь получить гласный, который вам нужен? 'vowelNumber': вам нужно целое число' i', которое проходит через строку, и вам нужно другое целое число, чтобы сохранить счет. Вы не можете использовать 'i' для обоих одновременно. Кроме того, я рекомендую изменить 'vowelNumber', чтобы он возвращал' int'. – ajb

+0

'vowelPositions': Вы говорите, что хотите добавить 1 к своим ответам перед добавлением в строку. Отлично, просто сделай это. Просто имейте в виду, что 'result = result + i + 1 +" "' не будет работать, потому что первый * добавляет * 'i' к' result' как строку, затем добавляет '1' к' result' как строка. Скобки помогут. – ajb

ответ

0

Подсказки:

  1. В части 1, вы делаете это: result = result; Это нонсенс. Он ничего не делает.

  2. В части 2, ошибка компиляции, потому что вы пытаетесь правопреемникаchar к String. Это не законно. Но это также не то, что вы должны пытаться делать. (Думайте «добавить», а не «присваивать» ...)

  3. В первой части первая ошибка: String result = "aeiouAEIOU";. Фактически, это должно быть String result = input;.

  4. В части 4 вы считаете все гласные, а не разные гласные. Вам также необходимо включить счет (или счет) в String (в результате).

  5. О части 5 вы говорите: «работает очень хорошо, за исключением того, что я хотел бы добавить 1 ко всем цифрам». Так сделай это!

+0

Спасибо. Я не был уверен, как поставить обновление на мой вопрос, поэтому я его отредактировал. Я добился значительных успехов и теперь компилирую, но не получаю правильных результатов. Есть идеи? – phantasms

+0

результат = результат + (i + 1) + "". Поскольку i + 1 находится в круглых скобках, и они оба числа, + будет рассматриваться как добавление чисел вместо добавления строки. Тогда результат добавления будет преобразован в строку. – ajb

+0

* «Любые идеи» * - Честно говоря, у вас уже было более чем достаточно намеков. –

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