2016-12-12 11 views
-3

私は持っている質問について助けを探しています。私たちはちょうど1トンのC++を学んだら、私たちのコースで簡単なJavaを学び始めました。連続した文字をチェックするプログラム - Java

クラスで教えられた以上にコードを知っている人のための私たちのボーナスミッションの1つ。

使命は次の通りです:ユーザーから入力された文字(一度に1文字、すべての文字は小文字とみなされます)を取得する名前lettersSeriesによって関数を記述します。この関数は、ユーザーが連続した3文字を入力すると、ユーザーからの文字の受け入れを停止します。

例(唯一のforループは、whileループなしで使用することができる): - > B - > A - >C - > D - > E(ここで停止)

限りI私はいくつかのオプションを試しましたが、アルファベットをどのようにトレースするか、特に文字が連続しているかどうかを確認する方法はわかりません。

ありがとう!

public static void letterSeries() { 
    //We create a scanner for the input 
    Scanner letters = new Scanner(System.in); 
    for(Here I need the for loop to continue the letters input) { 
     //Here I need to know if to use a String or a Char... 
     String/Char letter = next.<//Char or String>(); 
     if(Here should be the if statement to check if letters are consecutive) { 
      /* 
       Here should be 
       the rest of the code 
       I need help with 
      */ 

明らかに、コードを変更してパターンを作成することはできませんが、もっと簡単な方法で幸せになれます。

+0

いくつかのコードを書こうとしてください。 Googleの検索を行います。あなたが立ち往生したとき。具体的な問題を教えてください。幸いにお手伝いさせていただきます。 –

+0

ヒント:連続した文字をトレースし、前に文字を保存し、距離が1であるかどうかを確認します。距離が1の場合は、varを増分し、そうでない場合はvarを0にリセットします。もう少し努力(コード)を入れ、問題があれば元に戻ってください。 – PeterMmm

+0

whileループで解決する方法が分かっているなら、 'for'ループにするのは簡単です。ループ 'while(){...}'は空の初期化部分とインクリメント部分を持つ 'for'ループとして書くことができます:for(; ;){...}'。多分譲渡の精神ではないが、それは法律の手紙に従う。 :) –

答えて

0

私はこの問題にどのように取り組んでいるのですか。これで空白を埋めるようにしますが、私はあなたの宿題をすべてやっていません。

private void letterSeries() { 
    Scanner scanner = new Scanner(System.in); 
    char prevChar; 
    char currChar; 
    int amountOfConsecutives = 0; 
    final int AMOUNT_OF_CONSECUTIVES = 2; 

    for(;;) { 
     // Take in the users input and store it in currChar 
     // Check if (prev + 1) == currChar 
      // If true, amountOfConsecutives++ 
      // If false, amountOfConsecutives = 0; 
     // If amountOfConsecutives == AMOUNT_OF_CONSECUTIVES 
      // Break out of the loop 
    } 
} 
+0

ありがとうございます、ちょうど私が必要としたもの。 currChar - prevChar = 1ならば、単に減算の方法を使って、代わりにチェックすることができますか? –

+0

これは、ユーザーが 'z'の後に' a'を入力する場合を除いて、すべての場合に機能します。ヒント:なぜASCIIテーブルが失敗するのか見てみましょう。 – user123

+1

私はおそらくあなたが 'prevChar + 1 == curChar'を望むと思います。そして確かにあなたは '%26'の部分を必要としません。 –

0

文字の連続性を確認するには、charsのUnicode番号を使用します。aとbが文字の場合は、b-a == 1であるかどうかを確認してください。大文字小文字を区別しない方法'をaに続けて)チェックしてください:(b-a == 1 || b-a == 33)

+0

Javaでは、ASCIIコードではなくUnicode値になりますが、同じことになります。 –

+0

私はまだこのメソッドをjavaで使用できますか?このタイプのチェックでif文を書くと、それは機能しますか? –

+0

お試しください。 varsのプリミティブ型としてcharsを使用します。 – Matt

0
private void letterSeries() {   
    Scanner letters = new Scanner(System.in); 
    String last = ""; 
    int counter = 0; 
    for (;counter < 2;){ 
     if (last.equals (last=letters.next())) counter ++; 
     else counter = 0 
    } 
} 
+1

文字が連続していない場合は、カウンタをリセットする必要があります。また、終端テストは 'counter <3 'でなければなりません。これはまた、区切り文字で区切られた文字を必要とすることがあります。 –

+0

さて、ループを壊すことはできませんか? –

+0

@TedHopp Ups、私はカウンターをリセットするのを忘れました。終了条件は正しいです、あなたがそれを信じていない場合は試してください –

0
Scanner letters = new Scanner(System.in); 
char previousChar = '\0'; 
int consecutive = 1; 
for(; consecutive != 3 ;){ 
    char userInput= letters.findWithinHorizon(".", 0).charAt(0); 
    if (userInput - previousChar == 1){ 
     consecutive++; 
    } else { 
     consecutive = 1; 
    } 
    previousChar = userInput; 
} 

私は、このソリューションで少しだまさ。 forループを中間部分だけで使用したので、whileループのように動作します。

とにかく、ここでの動作は次のとおりです。

最初の3行は、ユーザーが入力する連続する文字の数をカウントする変数consecutiveと、前の文字を格納するpreviousCharというユーザー入力用のスキャナーを作成します。

"なぜconsecutiveが1で始まるのですか?"あなたは尋ねるかもしれない。ユーザが1文字を入力すると、それはそれ自身と連続しています。

forループでは、consecutive != 3の間、コードが実行されます。ループの最初の行は、findWithinHorizon(".", 0).charAt(0)を使用して文字を読み取ります。そして、if文はそれが直前の文字と連続する文字かどうかをチェックします。そうであればconsecutiveに1を加え、そうでなければconsecutiveを1にリセットします。最後に、previousCharuserInputに設定して、次の反復の準備をします。

関連する問題