首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计数倍数

计数倍数
EN

Stack Overflow用户
提问于 2021-03-06 06:20:43
回答 3查看 3.3K关注 0票数 1

我被指派为类编写一个计算倍数的java程序。该程序以三个整数作为输入:低,高,x。然后程序输出x在低和高之间的倍数。

如果输入是: 1,10,2

产出如下:5

我的老师有分配问题的倾向,我们在课堂上没有讨论过,我不知道从哪里开始。我没有要求完整的代码,只是问如何设置问题

我不知道如何通过程序来遵循我的逻辑:到目前为止,我所拥有的是

代码语言:javascript
运行
复制
import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      
      int low, high, x;
      int count = 0;
      
      low = scnr.nextInt();
      high = scnr.nextInt();
      x = scnr.nextInt();
      
      for(int i = low; i <= high; i++){
         
         if(i % x == 0){
            count++;
         }
         
         if (i % x != 0){
            
            //System.out.println(count);// someone suggested to move this
         }
      }
      System.out.println(count);  
   }
}
~~~~~~

If I input 1, 10, 2

My output is 01234

Moved the print of count outside of the loop... man I am tired.

FINAL EDIT: This code works, it accomplishes the goal. Thank you to @charisma and everyone else that helped me understand what was going on here. I am new to java but determined to learn more! Thanks all!!!!!
EN

回答 3

Stack Overflow用户

发布于 2021-03-06 06:37:09

您可以使用类似于w3schools中的以下代码的扫描器类输入数字:

代码语言:javascript
运行
复制
import java.util.Scanner;  // Import the Scanner class

class Main {
  public static void main(String[] args) {
    Scanner myObj = new Scanner(System.in);  // Create a Scanner object
    System.out.println("Enter username");

    String userName = myObj.nextLine();  // Read user input
    System.out.println("Username is: " + userName);  // Output user input
  }
}

lowhighx可以是数据类型的int

要检查lowhigh之间的数字是x的倍数,可以使用for循环。您可以声明一个新变量count,它可以在每次count++循环找到多个变量时使用for递增。%运算符可用于查找倍数。

可以使用System.out.println(" " + );输出

编辑:

%操作符需要两个操作数,并给出剩余的操作数。所以,如果是i % x == 0,这意味着ix的倍数,我们做count++

i的值将贯穿lowhigh

代码语言:javascript
运行
复制
for (i = low; i <= high; i++) {
    if (i % x == 0) {
        count++;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-06 07:45:15

一旦您进入了基本实现(正如魅力所解释的那样),您会注意到,如果数字很大,可能需要很长时间:您有循环的high - low + 1迭代。因此,您可以开始优化,以便在固定时间内获得结果:

  • 第一个倍数是qLow * x,其中qLow是rational商((double) low) / x顶棚
  • 最后一个倍数是qHigh * x,其中qHigh是rational ((double) high) / x的底层,

Java提供了一个Math.floor()Math.ceil(),但是您可以使用整数除法和使用符号来获得相同的结果:

代码语言:javascript
运行
复制
final int qLow = -(-low / x);
final int qHigh = high / x;

现在,您只需计算qLowqHigh包含的整数的数量。

代码语言:javascript
运行
复制
return qHigh - qLow + 1;

关注点:如果是x < 0,那么您需要使用qLow - qHigh,所以使用qLow - qHigh更安全:

代码语言:javascript
运行
复制
return x > 0 ? qHigh - qLow + 1 : qLow - qHigh + 1;

x == 0案件应该在一开始就处理好。

票数 1
EN

Stack Overflow用户

发布于 2022-03-06 19:15:30

将count++;放在最后一个print语句之后

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66502977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档