Kindly Review My Code :-) Thanks in advance
Hi all ,
i was solving one puzzle using JAVA , I have figured the solution , expected result is also coming but as My program is not up to the standard i am loosing points . Can anyone please help me figure it out what is not correct in my program . Thanks in advance .
Problem Description :- There is one friendly number and N unfriendly numbers. We want to find how many numbers are there which exactly divide the friendly number, but does not divide any of the unfriendly numbers.
Input Format:
The first line of input contains two numbers N and K seperated by spaces. N is the number of unfriendly numbers, K is the friendly number.
The second line of input contains N space separated unfriendly numbers.
Output Format:
Output the answer in a single line.
Constraints:
1 <= N <= 10^6
1 <= K <= 10^13
1 <= unfriendly numbers <= 10^18
Sample Input:
8 16
2 5 7 4 3 8 3 18
Sample Output:
1
Explanation :
Divisors of the given friendly number 16, are { 1, 2, 4, 8, 16 } and the unfriendly numbers are {2, 5, 7, 4, 3, 8, 3, 18}. Now 1 divides all unfriendly numbers, 2 divide 2, 4 divide 4, 8 divide 8 but 16 divides none of them. So only one number exists which divide the friendly number but does not divide any of the unfriendly numbers. So the answer is 1.
My Solution :- :-
PHP Code:
import java.util.Scanner;
import java.util.Vector;
public class Solution {
String[] input;
Vector friendlyDivisor = new Vector();
int[] unfriendlyNumbers;
int noOfUnfriendlyNo;
int friendlyNumber ;
public static void main(String[] args) {
Solution classIns = new Solution();
classIns.input = new String[2];
Scanner scan = new Scanner(System.in);
String getInput = scan.nextLine();
String[] tempArr = getInput.split(" ");
if(tempArr.length > 2){
System.exit(1);
}
if(classIns.validateInput(tempArr[0])){
int temp1 = Integer.parseInt(tempArr[0]);
if(classIns.validateInput(temp1,"unfriendlyNumber")){
classIns.noOfUnfriendlyNo = temp1;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
if(classIns.validateInput(tempArr[1])){
int temp2 = Integer.parseInt(tempArr[1]);
if(classIns.validateInput(temp2,"unfriendlyNumber")){
classIns.friendlyNumber = temp2;
classIns.input[0] = getInput;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
//System.out.println("Enter next line");
String str = scan.nextLine();
classIns.input[1] = str;
String[] tempArr2 = str.split(" ");
classIns.unfriendlyNumbers = new int[classIns.noOfUnfriendlyNo];
if(classIns.unfriendlyNumbers.length != tempArr2.length){
System.exit(1);
}
for(int count=0 ;count<tempArr2.length;count++){
String str2 = tempArr2[count];
if(classIns.validateInput(str2)){
int temp3 = Integer.parseInt(str2);
if(classIns.validateInput(temp3,"unfriendlyNumberList")){
classIns.unfriendlyNumbers[count] = temp3;
}
else{
System.exit(1);
}
}
else{
System.exit(1);
}
}
int result = classIns.calculateSulution();
System.out.println(result);
}
public boolean validateInput(int num,String str){
if(str.equalsIgnoreCase("friendlyNumber")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 13.0))) ){
return false;
}
}
else if(str.equalsIgnoreCase("unfriendlyNumber")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 6.0))) ){
return false;
}
}
else if(str.equalsIgnoreCase("unfriendlyNumberList")){
if(! ((num >= 1) &&(num<= Math.pow(10.0, 18.0))) ){
return false;
}
}
return true;
}
public int calculateSulution(){
int count = 0;
this.findDivisorForFriendlyNumbers();
//for(int i = 0;i<this.friendlyDivisor.length;i++){
for(Object o : this.friendlyDivisor){
int temp1 = (Integer)o;
boolean test = true;
for(int j = 0;j<this.unfriendlyNumbers.length;j++){
int temp2 = this.unfriendlyNumbers[j];
if(temp2%temp1==0){
test = false;
break;
}
if((j == (this.unfriendlyNumbers.length - 1)) && test){
count++;
}
}
}
return count;
}
public void findDivisorForFriendlyNumbers(){
int countDiv= 0;
//Vector vect = new Vector();
for(int count=1;count<=this.friendlyNumber;count++){
if(this.friendlyNumber%count==0){
countDiv++;
this.friendlyDivisor.add(count);
}
}
}
public boolean validateInput(String val){
boolean result = true ;
try {
Integer.parseInt(val);
} catch (NumberFormatException ex) {
return false;
}
return true;
}
}
Re: Kindly Review My Code :-) Thanks in advance
There are a few things I would recommend:
1. Use comments. These should help explain what your code is doing in a higher-level form.
2. Don't use Vector. Use the ArrayList class instead. There are various reasons for this, but it boils down to ArrayList providing better performance and more control.
3. Try to avoid using System.exit(). Personally I'm of the opinion that a program should terminate on it's own (i.e. return), not be force to terminate using System.exit().
4. Consult the teaching staff for why they took points off. There may be something they're looking for or suggestions they could provide. Ultimately they're the ones in control of your grade, not us. Plus they probably looked over the program more thoroughly than I did.