2013-03-13 3 views
-5

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

import java.util.Scanner; 
public class mathpowers { 
    public static void main(String args[]) 
    { 
     Scanner a = new Scanner (System.in); 
     System.out.print("Enter string: "); 
     String s = a.nextLine(); 
     int count = 0; 
     for (char c : s.toCharArray()) 
     { 
      if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') { 
      { 
       c = '_'; 
       System.out.println (c[i]); 
      } 
     } 
     System.out.println("Your string has " + count + " upper case letters."); 
    } 
} 
+1

Какая ошибка компиляции вы получаете? –

ответ

1

Ваш код страдает от многих проблем и не компилируется.

  • Заменить c[i] на c. c - char, а не String. (У вас даже нет i ...)
  • Вы печатаете count, но вы никогда не увеличиваете его.
  • Даже если вы посчитаете count, вы считаете гласные, а не верхние регистры, когда вы печатаете.
  • Вы назначаете "_" на номер c и печатаете его, ваш выход будет всегда _.

Может быть, вы хотите сделать что-то вроде этого:

Scanner a = new Scanner (System.in); 
System.out.print("Enter string: "); 
String s = a.nextLine(); 
String res = ""; 
for (char c : s.toCharArray()) 
{ 
    if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') { 
     res = res + '_'; 
    } 
    else 
     res = res + c; 
} 
System.out.println(res); //Will contain the string with the vowels replaced with _ 

Или .. лучший код:

Scanner a = new Scanner (System.in); 
System.out.print("Enter string: "); 
String s = a.nextLine(); 
String[] vals = {"a", "u", "o", "e", "i"}; 
for(String val : vals) 
    s = s.replaceAll(val, "_"); 
System.out.println(s); 
+0

Это, вероятно, домашнее задание/задание, не думайте о регулярном выражении OP. но, очевидно, хорошее решение. думаю, было бы хорошо, если бы вы объяснили, что происходит в вашем коде – PermGenError

+1

Да, я новичок в массивах, не понял system.out.print (c), а не c [i]. Это поставило проблему. Благодаря! – Aniki

1
System.out.println(c[i]); 

должен быть

System.out.println(c); 
+0

+1, хе-хе, я смотрел на код за последние 2 минуты ..: P хорошее место – PermGenError

0

Во-первых, нужно нужен import ключевое слово перед java.util.Scanner; на вашей первой линии , Кроме того, необходимо удалить дополнительный { в коде ниже

if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') { 
{ //<- This is not needed as you have another on on the end of the line above 
c = '_'; 
System.out.println (c[i]); 
} 
} 

Также c в приведенном выше коде является char не массив, так что вам нужно только позвонить System.out.println (c); но вы просто назначить '_' -с перед вызовом так вы сможете распечатать только _. Другая проблема заключается в том, что вы изменяете значения только в массиве, создаваемом s.toCharArray(), поэтому вам нужно сделать этот вызов до цикла for, а затем после его использования использовать для создания новой строки для назначения s.

И, наконец, вы никогда не увеличиваете count, поэтому вы в последний раз распечатываете всегда, скажем, 0, но я думаю, вы решите это позже.

Если вы еще не используете интегрированную среду разработки (IDE), такую ​​как Eclipse или NetBeans Я рекомендую вам загрузить ее, поскольку она выделит вам эти ошибки, как текстовый процессор, подчеркивает правописания и грамматические ошибки.

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