Error of "class or interface expected" at Mylong class for problem of API's
Wondering if anyone can help with problem of API's
compiler issue found at MyLong class imports error says 'class' or 'interface' expected
Code :
import java.util.*;
import java.io.*;
import java.util.Scanner;
public class PGM4
{
public static void main(String[] args) throws IOException
{
String fname; int temp;
MyLong nums [];
Scanner kb = new Scanner(System.in);
System.out.println("How many MyLong objects do you want to have? "
+ "\nAn input of 30 or more is suggested.");
temp = kb.nextInt();
nums = new MyLong[temp];
System.out.print("Enter the output filename: ");
Scanner file1 = new Scanner(System.in);
fname = file1.nextLine();
FileWriter fwriter = new FileWriter(fname);
PrintWriter myOutputFile = new PrintWriter(fwriter);
PrimeChecker pCheck = new PrimeChecker();
for(int i = 0; i < nums.length; i++)
{ nums[i] = new MyLong();
nums[i].fillPrimeInfo();
}
myOutputFile.println("Mixed Numbers: ");
for(int i = 0; i < nums.length; i++)
{
myOutputFile.print("\n" + nums[i].getNum());
if(pCheck.primeOrNot(nums[i].getNum())== 1)
{
myOutputFile.println(" is a prime number.");
myOutputFile.println("The largest prime number before " +
nums[i].getNum() + " is " +
nums[i].getNextSmallerPrimeNumber());
myOutputFile.println("The largest prime number after " +
nums[i].getNum() + " is " +
nums[i].getNextLargerPrimeNumber());
}
else if(pCheck.primeOrNot(nums[i].getNum())!= 1)
{
myOutputFile.println(" is not a prime number." +
" It is divisible by: " +
pCheck.primeOrNot(nums[i].getNum()));
myOutputFile.println("The largest prime number before " +
nums[i].getNum() + " is " +
nums[i].getNextSmallerPrimeNumber());
myOutputFile.println("The largest prime number after " +
nums[i].getNum() + " is " +
nums[i].getNextLargerPrimeNumber());
}}
myOutputFile.println("\nPrime Numbers: ");
for(int i = 0; i < nums.length; i++)
if(pCheck.primeOrNot(nums[i].getNum())== 1)
myOutputFile.println(nums[i].getNum());
myOutputFile.println("\nNon-Prime Numbers: ");
for(int i = 0; i < nums.length; i++)
if(pCheck.primeOrNot(nums[i].getNum())!= 1)
myOutputFile.println(nums[i].getNum());
myOutputFile.close();
}
}
// *****************MyLong class**********************
import java.util.Random;
import java.math.*;
public class MyLong
{
private long num;
byte smallestFactor;
long nextSmallerPrimeNumber, nextLargerPrimeNumber;
public MyLong()
{ Random rd = new Random();
num = Math.abs(rd.nextLong());
smallestFactor = 1;
nextSmallerPrimeNumber = 0; nextLargerPrimeNumber = 0;
}
public void fillPrimeInfo()
{
PrimeChecker pCheck = new PrimeChecker();
long ck = pCheck.primeOrNot(num);
if( ck == 1) smallestFactor = 1;
else smallestFactor = ck;
for(int s = num-1; s > 0; s--)
if(pCheck.primeOrNot(s) == 1)
{ nextSmallerPrimeNumber = s; break;}
for(int j = num + 1; j < System.currentTimeMillis(); j++)
if(pCheck.primeOrNot(j)==1)
{ nextLargerPrimeNumber = 1;
break;}
}
public long getNum() {return num;}
public byte getSmallestFactor() {return smallestFactor;}
public long getNextSmallerPrimeNumber() {return nextSmallerPrimeNumber;}
public long getNextLargerPrimeNumber() {return nextLargerPrimeNumber;}
}
//********************primeChecker class***********************
public class PrimeChecker
{ public static long primeOrNot(long x)
{
if(x == 2) return 1;
for(long y = 2; y < x/2; y++)
if(x%y == 0)
return y;
return 1;
}
}
Re: need help with an API problem
Umm... Wow. That's a lot of errors. First: Are all 3 classes in separate files? If not, you can only import at the top of the file, not for each class (each class gets all the imports, though). Second, any class you create inside the main class must be declared static if you want to be able to use the class without a PGM4 object. Along with this, it seems you're trying to access some methods in a static way or in an instantiated way, but the method is declared otherwise. The last compilation problem I noticed was that Java won't automatically let you cast numbers "down" (lost of precision). You must put the cast in manually. It will, however, let you cast up automatically or manually. However, since you're dealing with longs, I went a ahead and changed the variables that needed casting into longs.
Here's the code I had after I fixed all the compiler errors. Note: this doesn't guarantee that the program will do what you want it to!
Code :
import java.util.*;
import java.io.*;
import java.util.Scanner;
public class PGM4
{
public static void main (String[] args) throws IOException
{
String fname;
int temp;
MyLong[] nums;
Scanner kb = new Scanner(System.in);
System.out.println("How many MyLong objects do you want to have? " + "\nAn input of 30 or more is suggested.");
temp = kb.nextInt();
nums = new MyLong[temp];
System.out.print("Enter the output filename: ");
Scanner file1 = new Scanner(System.in);
fname = file1.nextLine();
FileWriter fwriter = new FileWriter(fname);
PrintWriter myOutputFile = new PrintWriter(fwriter);
PrimeChecker pCheck = new PrimeChecker();
for (int i = 0; i < nums.length; i++)
{
nums[i] = new MyLong();
nums[i].fillPrimeInfo();
}
myOutputFile.println("Mixed Numbers: ");
for (int i = 0; i < nums.length; i++)
{
myOutputFile.print("\n" + nums[i].getNum());
if (pCheck.primeOrNot(nums[i].getNum()) == 1)
{
myOutputFile.println(" is a prime number.");
myOutputFile.println("The largest prime number before " + nums[i].getNum() + " is "
+ nums[i].getNextSmallerPrimeNumber());
myOutputFile.println("The largest prime number after " + nums[i].getNum() + " is "
+ nums[i].getNextLargerPrimeNumber());
}
else if (pCheck.primeOrNot(nums[i].getNum()) != 1)
{
myOutputFile.println(" is not a prime number." + " It is divisible by: "
+ pCheck.primeOrNot(nums[i].getNum()));
myOutputFile.println("The largest prime number before " + nums[i].getNum() + " is "
+ nums[i].getNextSmallerPrimeNumber());
myOutputFile.println("The largest prime number after " + nums[i].getNum() + " is "
+ nums[i].getNextLargerPrimeNumber());
}
}
myOutputFile.println("\nPrime Numbers: ");
for (int i = 0; i < nums.length; i++)
if (pCheck.primeOrNot(nums[i].getNum()) == 1)
myOutputFile.println(nums[i].getNum());
myOutputFile.println("\nNon-Prime Numbers: ");
for (int i = 0; i < nums.length; i++)
{
if (pCheck.primeOrNot(nums[i].getNum()) != 1)
{
myOutputFile.println(nums[i].getNum());
}
}
myOutputFile.close();
}
// *****************MyLong class**********************
public static class MyLong
{
private long num;
long smallestFactor;
long nextSmallerPrimeNumber, nextLargerPrimeNumber;
public MyLong ()
{
Random rd = new Random();
num = Math.abs(rd.nextLong());
smallestFactor = 1;
nextSmallerPrimeNumber = 0;
nextLargerPrimeNumber = 0;
}
public void fillPrimeInfo ()
{
PrimeChecker pCheck = new PrimeChecker();
long ck = pCheck.primeOrNot(num);
if (ck == 1)
smallestFactor = 1;
else
smallestFactor = ck;
for (long s = (num - 1); s > 0; s--)
if (pCheck.primeOrNot(s) == 1)
{
nextSmallerPrimeNumber = s;
break;
}
for (long j = (num + 1); j < System.currentTimeMillis(); j++)
if (pCheck.primeOrNot(j) == 1)
{
nextLargerPrimeNumber = 1;
break;
}
}
public long getNum ()
{
return num;
}
public byte getSmallestFactor ()
{
return smallestFactor;
}
public long getNextSmallerPrimeNumber ()
{
return nextSmallerPrimeNumber;
}
public long getNextLargerPrimeNumber ()
{
return nextLargerPrimeNumber;
}
}
// ********************primeChecker class***********************
public static class PrimeChecker
{
public long primeOrNot (long x)
{
if (x == 2)
return 1;
for (long y = 2; y < x / 2; y++)
if (x % y == 0)
return y;
return 1;
}
}
}
Re: need help with an API problem
Thank you for your help. I see that alot mishaps were there.
Re: need help with an API problem
I understand what it feels like :P everyone's new to programming at some point and time. If you stick at it, i'm sure you'll be able to pick up on these small details.