有没有办法在 int 类型方法中返回 void
Posted
技术标签:
【中文标题】有没有办法在 int 类型方法中返回 void【英文标题】:Is there a way to return void in int type method 【发布时间】:2020-01-16 15:43:36 【问题描述】:我试图创建一个方法来检查一个数字是否是素数,但是在创建该方法时我得到的是 0 而不是 void
。有没有办法用void
跳过我得到0的地方。如果没有,请建议任何其他方式。
我尝试将a
替换为null
,但无法从null
转换为int
public int getPrime(int n)
int a =0;
boolean k = true;
for (int i = 2 ; i<n;i++)
if(n%i==0) k = false;
if(k==true) a = n;
return a;
else return null; //Here is the problem
【问题讨论】:
使用包装类:public Integer getPrime(...
,然后您可以返回null
。或者你可以用Optional<Integer>
来做这更好。
我不清楚您所说的“我得到 0 而不是 void”是什么意思 - void
只是一个返回类型,而不是一个值。正如您所指出的,您也不能将null
用于int
- 尽管您可以更改方法以返回Integer
而不是int
。
看起来你在数字是素数时返回n
,否则尝试返回一个应该说“非素数”的东西。为什么不返回boolean
?
它是素数吗? 是一个是/否的问题,如果数字是素数,你可以返回 boolean
,true
,如果不是,则返回 false
。见***.com/questions/30957570/prime-numbers-test-in-java(滚动到最后查看实际有用的代码)
不返回非素数,它不应该返回任何东西 - 为什么?之后你会如何处理这个结果(void
,null
,让我们假装它是可能的)?
【参考方案1】:
是-否以boolean
结果检查:
public static boolean isPrime(int n)
if(n<2)
return false;
for(int i=(int)Math.sqrt(n); i>=2; i--)
if(n%i == 0)return false;
return true;
打印素数,不要打印非素数:
public static void main(String args[])
for(int i=0;i<100;i++)
if(isPrime(i))
System.out.println(i);
测试:https://ideone.com/nNiY1T
【讨论】:
【参考方案2】:我认为您正在尝试检查您的号码是否是主要号码,该方法必须返回布尔值而不是 int。
public boolean isPrime(int n)
for (int i = 2 ; i<n;i++)
if(n%i==0) return false;
return true;
这不是最佳算法,但它适用于真实类型。
【讨论】:
【参考方案3】:在此处使用非原始类型。整数与整数。这将允许您在需要的地方返回 null 。
【讨论】:
正确,但请解释清楚。以上是关于有没有办法在 int 类型方法中返回 void的主要内容,如果未能解决你的问题,请参考以下文章