2016-12-20 9 views
-1

ダイヤモンドリング(文字列)を返すプログラムを実行しようとしました。 コンパイルにエラーはありませんが、実行すると実行が停止しませんでした。Javaプログラムのエラー無限ループ

class Diamond { 
    public static String print(int n) { 
     int j=n/2,i=0,k=1; 
     String ch=""; 
     while(i<n){ 
     for(int c=0;c<java.lang.Math.abs(j);c--) 
      ch=ch + " "; 
     for(int r=0;r<k;r++) 
      ch=ch + "*"; 
      j--; 
      if(j<=-1){ 
       k=k-2; 
      } 
      else{ 
       k=k+2; 
      } 
      j--; 
      ch=ch + "\n"; 
      i++; 
} 
    return ch ;    
} 
    public static void main(String []args){ 
     System.out.println(Diamond.print(5)); 
    } 
} 

このコードは、無限ループだと思いますが、私はそれを見つけられません。以下のようなc++のためのあなたの最初のforループ変更c--

+5

'c = 0; c SomeJavaGuy

答えて

1

for(int c=0;c<java.lang.Math.abs(j);c++) 

あなたが実際にあなたが、あなたがこの値(abs(j))に達することは決してないだろうcをデクリメント場合は、より高い値でcを比較するとそれから離れている。したがって、無限ループを取得します。

1
int c=0;c<java.lang.Math.abs(j);c-- 

あなたは、cをデクリメントし、jは、これを試してみてください0

でない限り、それはjava.lang.Math.abs(j)を取得することはありませんので、正の値にそれを比較している:

int c=0;c<java.lang.Math.abs(j);c++