【问题标题】:Calculate the number of different digits in the integer计算整数中不同位数的个数
【发布时间】:2014-12-11 03:14:12
【问题描述】:

我正在练习学习 Java,我在网上找到了这个练习来输入一个长整数(例如 2827),然后在这种情况下计算整数(2,8 和 7)= 3 中有多少个不同的数字。

我正在考虑使用 for 循环,然后使用 subString,比较数字是否彼此相等,并且他们(教程)建议我应该使用“已使用”的数组来注册出现的数字,尽管如此

这是我目前得到的:

import java.util.Scanner;

public class UniqueInteger {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    boolean[] used = new boolean[10];
    int uniqueNbr = 0;

    System.out.print("Input an integer: ");
    String nbrString = String.valueOf(scan.nextLong());

    for (int i = 0; i < nbrString.length(); i++) {
        String bigI = String.valueOf(i);
        if(nbrString.substring(i,(i+1)).equals(bigI)){
            uniqueNbr++;
        }
    }
    System.out.println("Amount of unique digits: " + uniqueNbr);
}

}

我现在的问题是这段代码不起作用,我不确定我在这里采取了正确的方法。我也没有找到包含“使用”布尔数组的原因或目的。

  • 我的代码有什么问题?
  • 如何巧妙地使用布尔数组并提高代码效率?

【问题讨论】:

  • 您的方法似乎可行,但我自己会采取不同的方法。您有实际问题吗?
  • 您没有解释您发布的代码遇到的问题,或者根本没有提出问题。一个有效的关闭原因是“离题。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码. 没有明确问题陈述的问题对其他读者没有用处”。你能edit 解决这两个问题吗?
  • 我相信我现在已经解决了这些问题,Ken White。我就我的代码提出了两个问题。

标签: arrays string boolean


【解决方案1】:

您需要检查字符串中的当前数字是否已被使用(使用您的布尔数组)。如果尚未使用,请将 used[num] 设置为 true 并递增 uniqueNbr。

导入 java.util.Scanner;

public class UniqueInteger {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    boolean[] used = new boolean[10];
    int uniqueNbr = 0;

    System.out.print("Input an integer: ");
    String nbrString = String.valueOf(scan.nextLong());

    for (int i = 0; i < nbrString.length(); i++) {
        int num = Character.getNumericValue(nbrString.charAt(i));
        if(!used[num]) {
            uniqueNbr++;
            used[num] = true;
        }
    }
    System.out.println("Amount of unique digits: " + uniqueNbr);
}

}

【讨论】:

  • 这似乎没有给我任何其他输出,但零。不管我输入什么。
  • 对不起,我打错了。我修好了它!现在应该可以工作了。出于某种原因,我总是在这个网站上犯很多错别字,比我实际编码时还要多。诡异的! (:
  • 现在编辑后,它只计算输入中的位数。示例 (155) 变为 '3' 而不是 '2' 因为唯一数字是 1 和 5
  • 这就是诀窍,谢谢。我想我现在明白了,只是我以前从未见过'Character.getNumericValue(nbrString.charAt(i)'。但我会自己阅读,因为我认为这只是一种比较/等于的方式。谢谢
  • 那行代码只是将字符串中索引 i 处的字符转换为整数。你也可以使用Integer.parseInt(nbrString.substring(i, i+1));
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 2019-08-02
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
相关资源
最近更新 更多