2016-03-26 13 views
0

これは私の頭を抱えています。私は、入力スキャナから取ったユーザー入力で発生した*の数を数えようとしています。しかし、私が試してみるたびに、それは前の行からの数字を追加し続けるか、何かを出力することを拒否します。私はコードに問題が見られないので、失われ、不満を感じる。誰かが私が間違っていることを教えてもらえますか? コンパイラに構文エラーはありません。論理エラーは表示されません。文字列に*の出現回数を出力しようとしています。

import java.util.Scanner; 

public class lab11{ 

public static void main(String[] args){ 
     Scanner kb = new Scanner(System.in); 
     String input; 
     input = kb.nextLine(); 
     int count = 0; 
     while(!input.equals("#")){ 
       input = kb.nextLine(); 
       for(count = 1; count < input.length(); count ++){ 
         int starCount = 0; 
         if(input.charAt(count)=='*'){ 
           starCount++; 

         }//if 
         System.out.println(starCount); 
       }//for 
     }//while 


}//main 

}//class 
+0

charのインデックスに対してString.indexOfが-1より大きい場合は試してから、その部分文字列から続行してください。 – Jankapunkt

答えて

1

それはすべての反復後0を取得するようにするには、forループの内側starCountを初期化しています。 また、count0 &から始まります。System.out.println(starCount);の文はforループ後に入力する必要があります。ユーザー入力ごとにstarCountの最終値を印刷する必要があります。

は次のようにコードを変更します。あなたは/このような何かを行うことができなければならない

import java.util.Scanner; 

public class Main 
{ 
    public static void main(String[] args) 
    { 
      Scanner kb = new Scanner(System.in); 
      String input=""; 
      int count = 0; 
      while(true){ 
        input = kb.nextLine(); 
        if(input.equals("#")) 
         break; 

        int starCount=0; 
        for(count = 0; count < input.length(); count ++){ 
          if(input.charAt(count)=='*'){ 
            starCount++; 
          }//if 
        }//for 
        System.out.println(starCount); 
      }//while 
     }//main 
} 
+0

ありがとうございましたRajeev –

+0

@hgg ohh私はコードを更新しました、 –

0

whileループでのごwhile loopinput = kb.nextLine();に問題です。

文字列に'*'という数を取得するだけであれば、以下のようになります。

public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     String input; 
     input = kb.nextLine(); 
     int count = 0; 
     int starCount = 0; 
     for (count = 0; count < input.length(); count++) { 
      if (input.charAt(count) == '*') { 
       starCount++; 

      }//if 
     }//for 
     System.out.println(starCount); 


    }//main 
0

:それはストリームAPI

0

を使用してJava 8のワンライナーがある

String input = "abc*defde *d z*dz *"; 

final long count = input.chars() 
         .filter(c -> c == '*') 
         .count(); 

コードには3つの問題があります。1)ユーザー入力の最初の行を2行目に置き換えます。最初の行は決して考慮されません。 2)forループ内の変数は、各ループ反復で初期化されます。現在のcharが0.3他*の場合はSOには、1をカウントします)入力のあなたの最初の行が使用されていないコード

public static void main(String[] args){ 
      Scanner kb = new Scanner(System.in); 
      String input; 
      input = kb.nextLine(); 
      int count = 0; 
      while(!input.equals("#")){ 
       int starCount = 0; 
        for(count = 0; count < input.length(); count ++){ 
          if(input.charAt(count)=='*'){ 
            starCount++; 

          }//if 
        }//for 
        System.out.println(starCount); 
        input = kb.nextLine(); 
      }//while 


    }//main 
0
  1. 以下ません1.トライ0としてカウント値でループを開始します。
  2. forループでは、カウントは0から開始する必要があります。
  3. forcループではなくwhileループにstarcountの宣言を入れる必要があります。それで、*の数を数えることができます。
関連する問題