2014-03-05 239 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語句。

我希望這給你你如何能做到這一點一些瞭解。

相關問題