2017-10-10 8 views
1

1行に文字を配置します:私は文字列パラメータを受け取り、次のように文字の大文字と小文字を変更した結果の文字列を返すコード書かれている

  1. すべての母音は母音がある(大文字でなければなりませんが、E、I、O、U)
  2. すべての子音は
  3. 小文字で文字でない任意の文字は、ここで

を変更してはならないしなければならない私のコードです:

public class Simple { 

    public char ChangeCase() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 
     //String isVowel = "aeiou"; 
     char c='\0'; 
     for (int i = 0; i < inputString.length(); i++) { 
      c = inputString.charAt(i); 
      if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') { 
       c = Character.toLowerCase(c); 

       System.out.println(c); 
      } 
      else if (c=='b'||c=='c'||c=='d'||c=='f'||c=='g'||c=='h'||c=='j'||c=='k'||c=='l'||c=='m'||c=='n'||c=='p'||c=='q'||c=='r'||c=='s'||c=='t'||c=='v'||c=='w'||c=='x'||c=='y'||c=='z'|| 
       c=='B'||c=='C'||c=='D'||c=='F'||c=='G'||c=='H'||c=='J'||c=='K'||c=='L'||c=='M'||c=='N'||c=='P'||c=='Q'||c=='R'||c=='S'||c=='T'||c=='V'||c=='W'||c=='X'||c=='Y'||c=='Z'){ 
       c = inputString.charAt(i); 
       c =Character.toUpperCase(c); 
       System.out.println(c); 
      } 
      else if(c=='@'||c=='!'||c=='"'||c==' '||c=='!'||c=='"'||c=='#'||c=='$'||c=='%'||c=='&'||c=='('|| c==')'||c=='*'||c=='+'||c==','||c=='-'||c=='.'||c=='/'||c==':'||c==';'||c=='<'||c=='='||c=='>'||c=='?'||c=='['||c==']'||c=='^'||c=='_'||c=='`'||c=='{'||c=='|'||c=='}'||c=='~'||c=='"'){ 
       c=inputString.charAt(i); 
       c=c; 
       System.out.println(c); 
      } 
      else 
       c=c; 

     } 

     return c; 

    } 
} 

ランナークラス:私はハロー入力したときに私が取得

public class Runner { 
    public static void main(String[] args) { 
     Simple smpl=new Simple(); 
     smpl.ChangeCase(); 

    } 

} 

結果:

Enter an input String: hello 
H 
e 
L 
L 
o 

期待される結果:

私は期待どおりの結果を得るために変更する必要がありますどのような
HeLLo 

答えて

3

printlnからprintに変更すると、printlnは常に余分な行を追加するためです。

+0

'print'は私にこれを与える: 'こんにちは[INFO] NetBeansの-ExecEvent:{ "モジョ":{ "impl": "org.codehaus.mojo.exec.ExecMojo"、 "urls":["ファイル:\ /ホーム\ /ブライアン\ /。m2 \ /リポジトリ\/org \/codehaus \/mojo \/exec-/home/\ brian \ /。m2 \/repository \/org \/apache \/maven \ plugin \ /1.2.1 \ /exec-maven-plugin-1.2.1.jar "、"ファイル: \/maven-reporting-api \ /2.0.6 \ /maven-reporting-api-2.0.6.jar "、"ファイル:\/home \/brian \ /。m2 \ /リポジトリ\/org \/apache \/maven \/doxia \/doxia-sink-api \ /1.0-alpha-7 \ /doxia-sink-api-1.0-alpha-7.jar "、"ファイル:\/home \/brian \ /。m2 \/repository \/commons-cli \/commons-cli \ /1.0 \/comm ons-cli-1.0.jar " – bademba

+1

あなたの' return c; 'ステートメントの前に' System.out.print(System.lineSeparator()); 'を追加してください。 – jontro

+0

おかげで、あなたはそれを手に入れました。 – bademba

3

変更println()〜出力から改行文字を省略する場合。 toUpperCasetoLowerCaseを交換して、仕様に必要なコードを作成します。

現在、改行などの他の文字も印刷していません(「文字以外の文字は変更できません」という要件)。 二else ifを取り除くとelse支店と

else { 
    System.out.print(c); 
} 

また、余分なc = inputString.charAt(i);文を取り除くと交換しなさい。最初のものだけが必要です。

あなたが解決している問題に関して、私があなただったら私は正規表現を使用します。

とにかく、ここで同様に適用される他のいくつかの改良を加えた正規表現無しSimple.javaためのソリューションである:

import java.util.Scanner; 

public class Simple { 

    public void ChangeCase() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 
     String vowels = "aeiouAEIOU"; 
     for (char c: inputString.toCharArray()) { 
      if (vowels.indexOf(c) != -1) { // found vowel 
       c = Character.toUpperCase(c); 
      } else if (Character.isLetter(c)) { // must be a consonant 
       c = Character.toLowerCase(c); 
      } 
      System.out.print(c); 
     } 
    } 
} 
+1

'print'が私にこれを与えます:' HeLLo [INFO] NETBEANS-ExecEvent:{"mojo":{"impl": "org.codehaus.mojo.exec。 "/ home/\ brian \ /。m 2 \ /リポジトリ\/org \/codehaus \/mojo \/exec -maven-plugin \/usr/bin/plugin-1.2.1.jar "、"ファイル:\/home \/brian \ /。m2 \/rep ository \/org \/apache \/maven-reporting-api \ /2.0.6\/maven-reporting-api-2.0.6.jar "、" file:\/home \/brian \/.mx \/repository \/org \/apache \/maven \/doxia \/doxia-sink-api \ 1.0-alpha-7 \/doxia-s ink-api-1.0 "ファイル:\/home \/b rian \ /。m2 \/repositor y – bademba

+0

素晴らしいです、それは働いているようです! – neuhaus

1

最初のスターターとしては、 - 単にそれぞれ

c = Character.toLowerCase(c); 

他の呼交換しますあなたのifブロック内にtoUpperCase()があります。

コードは基本的には正しいものです。間違った場所でケースを変更するだけです。だから、単にこれらの呼び出しを "交換"してください!もちろん、println()は使用しないでください。これは "行"を印刷して、最後に "新しい行"を追加します。

0

println()は常に新しい行を追加するため、println()の代わりにprint()メソッドを使用してください。

+0

' print'を使用すると私に奇妙なものが与えられますHeLLo [INFO] NETBEANS-ExecEvent:{"mojo":{"impl": "org.codehaus.mojo.exec.E xecMojo"、 "urls":["fi le:\/home \/brian \ /。m 2 \ /リポジトリ\/org \/codehaus \/mo jo \/exec-maven-plu gin \ /1.2.1 \/exec-m ' – bademba

0

より良いコードのために最初にいくつかのヒント:

  1. Structorize酸味コードので、各ステップ(IF)のための方法を使用してください。
  2. 1文字の変数のみが反復変数である必要がありますが、変数が1文字のみの変数でない方が良いです。 (C)ここで

あなたのためにいくつかの簡単な例(最適化することができます):

public class Simple { 
    public void ChangeCase() { 
     String resultString; 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Enter an input String: "); 
     String inputString = scanner.nextLine(); 

     // make alle chars lower-case 
     resultString = inputString.toLowerCase(); 

     // make vowels upper-case 
     resultString = uppercaseVowels(resultString); 

     // print the result or change to return String for main() 
     System.out.println("Input: " + inputString); 
     System.out.println("Result: " + resultString); 
    } 

    private String uppercaseVowels(String inputString) { 
     inputString = inputString.replace('a', 'A'); 
     inputString = inputString.replace('e', 'E'); 
     inputString = inputString.replace('i', 'I'); 
     inputString = inputString.replace('o', 'O'); 
     inputString = inputString.replace('u', 'U'); 
     return inputString; 
    } 
} 
+0

最後に印刷するだけで少し速くなります。しかし、あなたが段階的にそれを必要とするならば、大文字のVowels() - MethodをCHARに変更し、stringBuilder(inputString.tolowercase())の各charに対してそれを呼び出すことができます。 – LenglBoy

+0

母音と母音を識別して残りの規則を与えるためにコードがループしますか? – bademba

+0

いいえ、このコードでは、すべて小文字にして大文字のすべての母音を設定しています。だから、定数は小さくて手触りが悪く、母音は大文字で、他の文字は大文字/小文字で無視されるためbeforreのように同じです。 このコードは、必要なものを正確に印刷していますが、必要な反復処理を行わずに構造を整え、短くしています。 – LenglBoy

関連する問題