有没有办法在 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&lt;Integer&gt; 来做这更好。 我不清楚您所说的“我得到 0 而不是 void”是什么意思 - void 只是一个返回类型,而不是一个值。正如您所指出的,您也不能将null 用于int - 尽管您可以更改方法以返回Integer 而不是int 看起来你在数字是素数时返回n,否则尝试返回一个应该说“非素数”的东西。为什么不返回boolean 它是素数吗? 是一个是/否的问题,如果数字是素数,你可以返回 booleantrue,如果不是,则返回 false。见***.com/questions/30957570/prime-numbers-test-in-java(滚动到最后查看实际有用的代码) 不返回非素数,它不应该返回任何东西 - 为什么?之后你会如何处理这个结果(voidnull,让我们假装它是可能的)? 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法避免隐式转换为 void*?

void 类型的数组

目标C:有没有办法在另一个方法中调用一个方法的完成块?

C语言中void main和int main有啥区别

使用不同的返回类型强制SFINAE

void main(), int main() 和int main(void)的区别