确定数字出现的次数 - Java

时间:2014-03-05 10:57:04

标签: java arrays numbers compare

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

以下是示例输出:

    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);     
}

有人可以帮我解释逻辑或代码吗?将非常感谢帮助。谢谢:))

P.S。我只需要使用Arrays。没有其他方法。

2 个答案:

答案 0 :(得分:0)

你应该用户a 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)
}

答案 1 :(得分:0)

好的,我更详细地阅读了这个问题,我希望你能想到一些事情。由于这显然是一个学校项目,我会尝试给你提示你需要做什么。

首先,你提到的负数部分。你正在做一个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分支,我们有print语句。

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