当前位置: 首页 > 知识库问答 >
问题:

这些语句如何防止重载?

慕承允
2023-03-14

我是Java编程的初学者。我是在编写一个基于prime checker的程序时遇到这个问题的。已经明确指出,;

编辑器中锁定的代码将使用一个或多个整数参数调用checkPrime方法。您应该以这样的方式编写checkPrime方法:代码只打印素数。请仔细阅读编辑器中给出的代码。也请不要使用方法重载!

我想知道下面的评论行w. r. t.下面的Java程序之后的声明的作用是什么?
它们在锁定代码中的用途是什么?

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.lang.reflect.*;
import static java.lang.System.in;
class Prime
{
    void checkPrime(int ... num)
    {
        for(int n:num)
        {
        int i,k=0;
        for(i=1;i<=n;i++)
        {
            if(n%i==0)
            ++k;
        }
        if(k==2)
        System.out.print(n+" ");
    }
    System.out.println();
}
}

public class Solution 
{

    public static void main(String[] args) 
{
        try
{
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        int n1=Integer.parseInt(br.readLine());
        int n2=Integer.parseInt(br.readLine());
        int n3=Integer.parseInt(br.readLine());
        int n4=Integer.parseInt(br.readLine());
        int n5=Integer.parseInt(br.readLine());
        Prime ob=new Prime();
        ob.checkPrime(n1);
        ob.checkPrime(n1,n2);
        ob.checkPrime(n1,n2,n3);
        ob.checkPrime(n1,n2,n3,n4,n5);  
      
      //What do the following statements from below till the end mean?
 
        Method[] methods=Prime.class.getDeclaredMethods();
        Set<String> set=new HashSet<>();
        boolean overload=false;
        for(int i=0;i<methods.length;i++)
        {
            if(set.contains(methods[i].getName()))
            {
                overload=true;
                break;
            }
            set.add(methods[i].getName());
            
        }
        if(overload)
        {
            throw new Exception("Overloading not allowed");
        }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }
    
}

共有2个答案

陈项禹
2023-03-14

这段代码只是从类Prime中提取方法名,并确保没有重复的名称。它通过检查一组方法名来迭代执行此操作,以获取当前正在计算的方法名。每次求值后,方法名称都会添加到集合中,以便下一次迭代可以检测下一个方法名称是否已经存在。

因此,锁定代码正在通过编写4个版本来检查您是否遵守了不重载检查总理的请求。我假设你会失败,如果你删除'锁定'代码也。

总之,由于有4个使用不同数量的整数参数调用checkPrime的示例,因此他们希望您演示如何编写一个处理不同数量整数参数的checkPrime函数。

ob.checkPrime(n1);
ob.checkPrime(n1,n2);
ob.checkPrime(n1,n2,n3);
ob.checkPrime(n1,n2,n3,n4,n5); 

有Java的方法可以做到这一点。见:https://www.baeldung.com/java-varargs

董喜
2023-03-14

基本上,它是检查你做了重载在总理类。它是获取类Prime中声明的所有方法。然后将它们的名称存储在set中,这样,如果任何名称已经存在于set中。它会抛出异常,你有重载的函数,这是限制在你的情况下。

    //getting all method in Prime
    Method[] methods=Prime.class.getDeclaredMethods();
    Set<String> set=new HashSet<>();
    boolean overload=false;
    //looping through all method array
    for(int i=0;i<methods.length;i++)
    {
        //checking if function already exist in set means, method is overloaded.
        if(set.contains(methods[i].getName()))
        {
            overload=true;
            break;
        }
        //adding method name in set. (set is used because, it does not hold 
        mutiple enteries for one value)
        set.add(methods[i].getName());
        
    }
    //if overload has been done in class then will throw exception
    if(overload)
    {
        throw new Exception("Overloading not allowed");
    }
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
 类似资料:
  • 我正在用java编写一些代码,它检查一个由51个对象组成的数组,名为,这些对象是从右向左移动到x:200px位置的播放器的圆圈。我想使它这样,玩家被判分或扣分的基础上,他们的按钮按下的时间与一个节拍的位置相比,到目前为止,我有以下几个: 这种方法会导致几个问题,因为范围重叠,以此类推,按下按钮通常会输出如下内容: 然而,我希望它一次只检查一个位置,例如最靠近播放器的位置,或者是迭代器,用于检查数组

  • 我希望停止对以下模块使用语句,因为Node version 11现在支持ES6,但除了作为语句外,我找不到任何关于如何编写以下语句的文档: 是不是和和一样? 例如我只见过: 对于我只看到:

  • 问题内容: 给定这两个表: 其中,TEST1具有两行,其值均为“ A”,而TEST2具有一行,其值均为“ B”。 当我运行此命令时: 我得到的输出: 似乎MINUS删除了重复项(因为TEST1中有两个“ A”行)。 如何获得MINUS查询以包含重复值(返回两个“ A”行)? 问题答案: Oracle在IN语句中支持多个列,因此您可以编写:

  • 本文向大家介绍我们如何使用MySQL REPLACE语句防止插入重复数据?,包括了我们如何使用MySQL REPLACE语句防止插入重复数据?的使用技巧和注意事项,需要的朋友参考一下 我们可以在插入数据时使用REPLACE语句,以防止插入重复数据。如果我们将使用REPLACE 命令而不是INSERT命令,那么如果记录是新记录,则插入记录的方式与INSERT相同,否则,如果记录是重复记录,则新记录将

  • 问题内容: 准备好的语句如何帮助我们防止SQL注入攻击? 维基百科说: 准备好的语句可以抵御SQL注入,因为稍后需要使用其他协议传输的参数值不需要正确地转义。如果原始语句模板不是从外部输入派生的,则不会发生SQL注入。 我不太清楚原因。用简单的英语和一些例子,简单的解释是什么? 问题答案: 这个想法很简单-查询和数据被发送到数据库服务器 分开 。 就这样。 SQL注入问题的根源在于 代码和数据 的

  • 问题内容: 停止使用不推荐使用的mysql_ *函数后,我切换到mysqli。但是后来,我注意到未准备好的语句对于SQL注入是不安全的。然后,我再次更改了代码。 我所拥有的是以下函数,该函数检查数据库中是否存在变量 $ ID 并打印该行的 title 值: 我将其更改为: 我的问题是:这是执行准备好的语句的正确方法吗?另外,我现在可以安全使用SQL注入吗?非常感谢任何愿意回答这个问题的人:) 问题