我刚写的,理论上说,输入23应该显示是素数,但却显示是非素数。麻烦大家看看怎么回事。我没有找到原因。
import java.io.*;class Judge{
private int number;
Judge(int a){
number = a;
}
void judge(){
int i;
int flag = 1;
for (i=2;i<number/2;i++){
if (number%i==0){
flag = 0;
System.out.println("This is not a sushu number!");
break;
}
else if(flag==1){
System.out.println("The number is a sushu!");
break;
}
}
}
}
public class sushu { /**判断是否是素数
* @param args
*/
public static void main(String[] args)
throws IOException {
// TODO Auto-generated method stub
System.out.println("Input the number:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k;
k = (int) br.read ();
Judge ob = new Judge(k);
ob.judge();
}}
import java.io.*;class Judge{
private int number;
Judge(int a){
number = a;
}
void judge(){
int i;
int flag = 1;
for (i=2;i<number/2;i++){
if (number%i==0){
flag = 0;
System.out.println("This is not a sushu number!");
break;
}
else if(flag==1){
System.out.println("The number is a sushu!");
break;
}
}
}
}
public class sushu { /**判断是否是素数
* @param args
*/
public static void main(String[] args)
throws IOException {
// TODO Auto-generated method stub
System.out.println("Input the number:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k;
k = (int) br.read ();
Judge ob = new Judge(k);
ob.judge();
}}
System.out.println("The number is a sushu!");
break;这段应该放在循环外面。
private int number;
Judge(int a){
number = a;
}
void judge(){
int i;
int flag = 1;
for (i=2;i<number/2;i++){
if (number%i==0){
flag = 0;
break;
}
}
if(flag==1)
System.out.println(number+" is a sushu!");
else
System.out.println(number+" is not a sushu number!");
}
}
public class s { /**判断是否是素数
* @param args
*/
public static void main(String[] args)
throws IOException {
// TODO Auto-generated method stub
System.out.println("Input the number:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k;
k = Integer.valueOf(br.readLine ());
Judge ob = new Judge(k);
ob.judge();
}}
public static void main(String[] args) throws Exception{
Test2 hand = new Test2();
int count = 1, max = 100;
while(count < max){
Conica.pl(count + ":" + isPrime(count));
count++;
}
}
public static boolean isPrime(int number) throws Exception{
//if(number < 0 || number.isNotDigit)
if(number <= 0)
throw new Exception();
if(number <= 2)
return true;
int max = (int)Math.sqrt(number) + 1;
for(int i=2; i<max; i++){
if(number % i == 0)
return false;
}
return true;
}
}我来凑个热闹来着。
The number is a sushu!
这难道是非素数???????有了错误不清楚的时候,最简单的办法就是从头开始按程序运行过程推进,看到底哪步有了问题。
你的程序的功能只是判断一个数是否能被2整除,若能,则为非素数!相反则为素数!这就错了。程序的错误上面的几位哥们也已经改了!但都存在一个错误----BufferedReader中的read函数,可能是没注意。
方法1:
可以把第二个break改成continue,再在里面加上条件判断语句,但这样就感觉复杂了。不提倡!
import java.io.*;class Judge{
private int number;
Judge(int a){
number = a;
}void judge(){
int i;
int flag = 1;
for (i=2;i<number/2;i++){
if (number%i==0){
flag = 0;
System.out.println("This is not a sushu number!");
break;
}
else if(flag==1){
if((i+1)>=(number / 2))
System.out.println("The number is a sushu!");
continue;
}
}
}
}public class sushu {
/**判断是否是素数
*/
public static void main(String[] args)
throws IOException {
// TODO Auto-generated method stub
System.out.println("Input the number:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int k;
k = Integer.valueOf(br.readLine());
/*接受数据,BufferedReader中的read函数只能接受单个字符,可以参考文档,或添加语句测试得知!
*/
Judge ob = new Judge(k);
ob.judge();
}
}
方法2:
像楼上几位哥们说的,把flag标记为1的语句提到循环外面来!(记得修改一下BufferedReader中的函数)共同进步。。