このプログラムは、1より大きい最小数と最小値よりも大きい最大数をユーザーに尋ねます。それが素数と完全数の数が表示され終わりプライム/パーフェクト/コンポジットナンバーチェッカーをより効率的/クリーナーにする
2 is divisible by 1
2 is prime.
2 is not perfect
3 is divisible by 1
3 is prime.
3 is not perfect
4 is divisible by 1 2
4 is composite.
4 is not perfect.
5 is divisible by 1
5 is prime.
5 is not perfect
6 is divisible by 1 2 3
6 is composite.
6 is perfect.
:それはそのプライムまたはコンポジット、およびこの形式での完全数の場合であれば、何によってその割り切れる数で番号を出力します。プログラムは動作しますが、それは、より効率的(あるいは間違って何イムがある場合)を作成/コードをクリーンアップする任意の方法がある場合、私は疑問に思って
コード:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int min;
int max;
//declaring min and max values
System.out.println("Enter minimum value to check (an integer greater than 1:)");
min=input.nextInt();
while(!(min>1)) {
System.out.println("The entry is valid. Please be sure to enter an integer greater than 1");
System.out.println();
System.out.println("Enter minimum value to check (an integer greater than 1:)");
min=input.nextInt();
}
System.out.println("Enter maximum value to check (an integer greater than your min value:)");
max=input.nextInt();
while(!(max>min)) {
System.out.println("The entry is valid. Please be sure to enter an integer greater than the min value");
System.out.println();
System.out.println("Enter maximum value to check (an integer greater than min:)");
max=input.nextInt();
}
//declaring count and tracking variables
int count;
int numPrime=0;
int numPerfect=0;
int temp=1;
String result=" ";
boolean isPrime=true;
boolean isPerfect=false;
int i;
//main loop
for(count=min;count<=max;count++) {
for(i=2;i<=count;i++) {
if(count%i==0&&i!=count) {
isPrime=false;
result=result+i+" ";
temp+=i;
}
else
isPrime=true;
}
//Perfect counter
if(temp==count) {
isPerfect=true;
numPerfect=numPerfect+1;
}
else
isPerfect=false;
//Composite print
if(!(result.equals(" "))) {
System.out.println(count+" is divisible by 1"+result);
System.out.println(count+" is composite.");
if(isPerfect==true)
System.out.println(count+" is perfect.");
else
System.out.println(count+ " is not perfect.");
System.out.println();
}
//Prime print
else {
numPrime=numPrime+1;
System.out.println(count+" is divisible by 1");
System.out.println(count+" is prime.");
System.out.println(count+" is not perfect");
System.out.println();
}
//reset values
result=" ";
temp=1;
}
System.out.println("Primes found: "+numPrime);
System.out.println("Perfect numbers found: "+numPerfect);
}
}
[コードレビュー](http://codereview.stackexchange.com/)で投稿することをおすすめします。 –
ありがとうございます! – rmcknst2
これは宿題なので、学習の機会を台無しにしたくないですが、forループの繰り返し回数を減らすことができると思いますか? 特に、(i = 2; i <= count; i ++)に対して。あなたは本当に2から数えるために反復する必要がありますか? countが144の場合、iの値はほとんど常に144の除数にはなりません.133の場合、なぜ繰り返し処理する必要がありますか? – JustinDanielson