2014-03-05 238 views
0

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

这里的示例输出:

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来做到这一点。没有其他方法。

+3

使用HashMap 而不是两个ArrayList

+0

@ user3226012:您已经以上面*注释*的形式回答。 –

+0

你干脆说这是行不通的,会发生什么?此外,您初始化变量'z10'没有任何价值,然后比较'finalArray.length'反对while循环,你们真的没有忘记分配'z10'?还有一两件事,在内部while循环,可以增加我和我''++,当我变得比数组的长度更大,会发生什么?你会做'finalArray [i] == blah'的比较,并得到一个越界的错误。 –

回答

0

你应该用户 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) 
} 
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语句。

我希望这给你你如何能做到这一点一些了解。

相关问题