【问题标题】:Determine how many times the number appeared - Java确定数字出现了多少次 - Java
【发布时间】:2014-03-05 10:57:04
【问题描述】:

我正在制作的这个程序有问题。这是该程序的目的: 编写一个程序,从用户那里获取数字输入。如果用户输入负数,程序将停止接受用户的输入。然后,程序会从程序中找出重复的数字,并确定它出现了多少次。

这是示例输出:

    Enter a number : 5
    Enter a number : 5
    Enter a number : 7
    Enter a number : 2
    Enter a number : 7
    Enter a number : 3

    Numbers Entered:
    2   _________ 1
    3   _________ 1
    5   _________ 3
    7   _________ 2

注意:如果数字出现两次或多次,则不会在输出中重复。数字也有排列。

我已经弄清楚第一部分(如果用户输入负数)

Scanner scan = new Scanner(System.in);
ArrayList<Integer> arrayNumbers = new ArrayList<Integer>();
ArrayList<Integer> countArray = new ArrayList<Integer>();
int x,;
int counter=0;
int confirm;
int length=0;
int input;
int z;
int elements=0;
for (x=0;x<=counter;x++)
{
    if (counter==x)
    {
        System.out.print("Enter a number : ");
        input = scan.nextInt();
        arrayNumbers.add(input);
        confirm = input;
        if (confirm<0)
        {
            counter--;
            arrayNumbers.remove(x);
        }
        else
        {
            counter++;
            length++;
        }
    }
}

我现在卡在程序的比较部分。我做了一个代码,但它似乎不起作用:

int blah,count,z10;
Arrays.sort(finalArray);
for (int i=0;i<finalArray.length;i++)
{
    blah = finalArray[i];
    count=0;
    while(finalArray[i]==blah&&z10<finalArray.length)
    {
        count++;
        i++;
    }
    System.out.println("Number : "+blah+" Count : "+count);     
}

有人可以帮我解释一下逻辑或代码吗?帮助将不胜感激。谢谢:)

附:我只需要使用数组来做到这一点。没有其他方法。

【问题讨论】:

  • 使用一个 HashMap 而不是两个 ArrayList
  • @user3226012:您有上述评论形式的答案。
  • 你只是说它不起作用,会发生什么?另外,您初始化变量z10 没有任何值,然后在while 循环中将finalArray.length 与它进行比较,您是不是忘记分配z10?还有一件事,在内部 while 循环中,将 i 增加为i++,当 i 变得大于数组的长度时会发生什么?您将进行比较 finalArray[i]==blah 并得到一个超出范围的错误。

标签: java arrays numbers compare


【解决方案1】:

你应该使用一个 HashMap< int,int > 存储数字和用户输入次数的地方

尝试这样的事情(这是一个基本的想法,而不是真正的代码):

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

当用户输入数字时,请执行以下操作:

if (map.containsKey(input)) {
  int counter = map.get(input) + 1;
  map.put(input, counter)
}

【讨论】:

    【解决方案2】:

    好的,我更详细地阅读了这个问题,有些事情我希望你考虑一下。由于这显然是一个学校项目,我会尽量给你一些提示,告诉你你需要做什么。

    首先,您提到的负数部分。您正在执行一个 for 循环并与随着每个添加数字而增加的计数器进行比较。您将每个数字添加到数组中,如果添加的最后一个数字为负数,则将其删除并减少结束 for 循环的计数器。虽然这行得通,但这不是一个可读性好的代码。您应该考虑使用检查输入的 while 循环,伪代码有点像这样:

    int input
    array numberArray
    
    read number into input from user
    while input >= 0:
        add input to numberArray
        read number into input from user
    

    这将从用户那里读取数字,如果它不是负数,它将添加到数组并再次读取一个数字,然后重复从用户读取的输入,只要它不是负数。

    在后面的部分中,您提到您需要帮助,您将拥有一个排序的数字数组,并且您想打印出数组中每个数字的数量,您可以按照您的操作方式进行操作。由于您的限制(以及我有限的 Java 知识),我可能会做类似以下伪代码所示的操作:

    sort numberArray
    int currentNumber = -1
    int counter
    
    for i = 0 while i < array.length do i++:
        if numberArray[i] is currentNumber:
            counter++
        else //if new number
            print how many times currentNumber has been encountered (before assigning currentNumber to a new number)
            currentNumber = numberArray[i]
            counter = 1
    print how many times currentNumber has been encountered
    

    这应该遍历整个数组,计算一个数字在数组中连续出现的次数,当您找到一个新数字时,您将打印出当前计数,选择​​新数字并将计数器设置为1. 循环后打印的原因是当我们到达数组中的最后一个数字时,我们不会进入我们有打印语句的 if/else 的 else 分支。

    我希望这能让您对如何做到这一点有所了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多