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

输入后输出控制台冻结

空夕
2023-03-14

我一直在尝试编码来查找给定数组元素的LCM。我的代码如下

public long LcmOfArray(List<int> a)
{
    long LCM = 1;
    bool divisible = false;
    int divisor = 2, count = 0;

    while (count != a.Count)
    {
        for (int i = 0; i < a.Count; i++)
        {
            if (a[i] == 0)
            {
                return 0;
            }
            if (a[i] < 0)
            {
                a[i] *= -1;
            }
            if (a[i] % divisor == 0)
            {
                divisible = true;
                a[i] /= divisor;
            }
            if (a[i] == 1)
            {
                count++;
            }
        }

        if (divisible)
        {
            LCM *= divisor;
        }
        else
        {
            divisor++;
        }
    }
    
    return LCM;
}

我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。

if (count == a.Count)
{
    return LCM;
}

但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!

共有2个答案

陆高峰
2023-03-14

一个while循环将持续运行,直到你给它一些东西来打破循环。在您的情况下,它打破循环的唯一方式似乎是在列表中的每一项都是1或达到0的情况下,因此根据列表的不同,它可能会或可能不会陷入无限循环。例如,a[i]=2似乎创建了一个无限循环。另一个编译器错误是因为某些条件可能会跳过返回语句。

if(count==a.Count)
{
   return LCM;
}
return void; // because what if count does not equal a.Count?
欧阳英彦
2023-03-14

你应该把bool divisible=false int count=0 在while循环中。既然你不能把int count=0在while循环之外,您应该使用while(true)而不是while(count!=a.count)并将下面的if语句放在while循环的最后一个。

if (count == a.Count)
{
    return LCM;
}

以下是完整的方法:

public static long LcmOfArray(List<int> a)
{
    long LCM = 1;
    int divisor = 2;

    while (true)
    {
        int count = 0;
        bool divisible = false;
        for (int i = 0; i < a.Count; i++)
        {
            if (a[i] == 0)
            {
                return 0;
            }
            if (a[i] < 0)
            {
                a[i] *= -1;
            }
            if (a[i] == 1)
            {
                count++;
            }
            if (a[i] % divisor == 0)
            {
                divisible = true;
                a[i] /= divisor;
            }
        }
        if (divisible)
        {
            LCM *= divisor;
        }
        else
        {
            divisor++;
        } 
        if (count == a.Count)
        {
            return LCM;
        }
    }
}

 类似资料:
  • 问题内容: 我只有一种方法。如何检查System.out.println()并将Scanner替换为使用JUnit自动输入值? PS,请提供一些解决方案… 问题答案: 理想情况下,提取尴尬的依赖关系,以便您可以在没有依赖关系的情况下进行测试。更改为简单: (考虑使用a 代替for 。) 然后,您实际上不需要进行单元测试-但您可以使用基于的进行测试,并基于的输出进行测试,从而提供所需的任何输入并检查

  • 问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是

  • 我正在尝试设置logstash input mongodb插件,以便从我的数据库中读取审计,但所有解析策略似乎都有问题,我不知道如何定制任何内容。 “flatte”parse_方法工作得很好,但它忽略了mongodb对象ID,并且除了在log_输入字段中之外,不会在任何地方输出它们。 “简单”parse_method包括对象标识,但以我无法弄清楚如何使用日期过滤器解析日期的方式输出日期(例如,“2

  • 当我在Android Studio上运行应用程序时,我看到了一些垃圾收集输出: 这是什么意思?(我正在阅读大型csv文件,其中有更多70k行)

  • 问题内容: 我通过Stata学习了数据操纵和分析,并使用log命令记录了所有写入的命令和生成的输出。这样做可以重现我的发现,检查以前的结果并与其他人共享pdf或txt。在Python中使用什么?如果我使用Python Jupyter Notebook或Spyder有区别吗? 问题答案: 执行所需操作的方法是使用命令,如下所述: 记录IPython输出?

  • 问题内容: 我最近为祖父使用Tkinter的Python和GUI编写了一个相当简单的程序,对于他将使用它的功能,它的工作非常漂亮。但是,当然有丑陋的控制台输出窗口。我已经通过简单地将文件的扩展名从.py更改为.pyw来成功摆脱了它。当我使用PyInstaller冻结它时,它再次出现!有什么办法可以解决这个问题吗? 提前致谢。 问题答案: 如果要隐藏控制台窗口,请参见以下文档:这是使用该选项的方式