Since this all looks okay, I presume it is the non-repeating part you're struggling with?
The best solution to that problem AFAIK is brute force - write a method that loops through the list and returns true if it is a duplicate or false if not. put that routine and the generation of the next random into a loop until it returns false, and only then assign the value into the array.
boolean isDuplicate = true;
while(isDuplicate) {
card[i][j]=1 + (int) (Math.random() *99);
isDuplicate = checkDuplicate(card1, i, j);
}
Then the isDuplicate method has to walk the array and compare the element at i,j with everything until it either finds a match (returning true) or runs out of elements (returning false).
No worries about variable names

. I don't apologize for making you read them in English, you shouldn't for returning the favor.
Hope that helps,
Don.