2017-04-24 5 views
-1

希望する動作:数字を1桁(2桁)ではない1桁からlimループを使用して範囲内の別個の数字を持つ数字を検索する

特定の問題:プログラムは無限ループで実行されます。

これは私がすでに行ったことです。それは動作していません。私は各ステップで値を印刷しようとしましたが、infinteループで1を与え続けます。

どうしたのですか?

public static void main(String args[]) { 
    Scanner sc= new Scanner(System.in); 
    double limit=sc.nextDouble(); // reading the range of numbers from 0 to limit-digit number 
    int count=0,total=0; 
    int lim=(int)(Math.pow(10.0,limit)); //setting range from 0 to 10^limit 
    System.out.println(lim); 
    for(int i=1;i<lim;i++) { 
     Set<Integer> set = new HashSet<Integer>(); //making a hash set to include the unique elements 
     System.out.println(i); 
     while (i > 0) {       
      int tempVal = i % 10; //each digit is extracted and stored in  hash set if unique 
      set.add(tempVal);   
      i = i/10; 
      count++; 
      //System.out.println(count); 
     } 
     count+=1; 
     if(count==set.size()) 
     { 
      total++; 
     } 
     count=0; 
    } 
    System.out.println(total); 
} 
+1

デバッガを使用してください。 – Jens

+1

デバッグヘルプを求める質問(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、およびその中で再現するために必要な最短コード質問自体。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[mcve]を作成する方法 – GhostCat

+0

コードにコメントを追加できますか? –

答えて

1

あなたのループであなたの問題:

while (i > 0) {//<<------------ 

あなたがするのではなく、あなたの状態の順序を逆持っているあなたの問題を解決するために:あなたが使用する必要が

while (i > 0) { 

while (i < 0) { 

それとも、またあなたのループでiを交換するためのロジックである。このようなcount

while (i > 0) { 

while (count > 0) { 
+0

私は整数型なので、i = 1/10のときは、i = i/10は0にしてはいけませんか? –

+0

はい、@RohitJaiswal –

+0

@RohitJaiswalはいこれは正しいです、別の解決策は 'while(i> 0){'ではなくwhile(i <0){'でチェックすることで問題を解決します –

1

私はあなたの問題はあなたが2つの目的のためにiを使用していると考えています。 iは、1からlimまでのループ制御変数です。ループ内でiを変更すると、ループ制御変数として機能しなくなります。それはlimに決して到達しないので、forループは決して終了しません。

代わりにiのコピーで作業する必要があります。iには別の数字があるかどうかを判断するため、i自体を変更せずに計算できます。

+0

mm、これはもっと論理的だと思うし、正しい私は実際に私の解決策に気付かない。Ole V.V.私はこの答えが正解でなければならないと思います@Rohit Jaiswalあなたは私の答え(+1)の代わりにこの答えを受け入れなければなりません –

関連する問題