Still i am getting file name like below:
B-13-4-006.jpg
and
B-5-7-008.jpg
but now i want to show 0 as prefix if value less than < 9 else as it is, in short want to show values in double figures, see my code below using to file name
"B-" + // prefix
LoginActivity.strEventID + "-" + // eventID
LoginActivity.strOperativeID + "-" + // operativeID
getNextNumber() + // counter
".jpg"
but i require, files name should look like below:
B-13-04-006.jpg
and
B-05-07-008.jpg
Use String.format("%02d", yournumber); to show 0 with a number if less than 10 (for two digits number).
Use method like
private String getPaddedNumber(int number) {
return String.format("%02d", number);
}
You can read Formatter documents for more details.
How to use into your code
"B-" + // prefix
getPaddedNumber(LoginActivity.strEventID) + "-" + // eventID
getPaddedNumber(LoginActivity.strOperativeID) + "-" + // operativeID
getPaddedNumber(getNextNumber()) + // counter
".jpg"
As you seem to have strings that need to be (optionally) padded with zeros, you can use a different approach than generally used to pad integers:
public String addPadding(int length, String text) {
StringBuilder sb = new StringBuilder();
// First, add (length - 'length of text') number of '0'
for (int i = length - text.length(); i > 0; i--) {
sb.append('0');
}
// Next, add string itself
sb.append(text);
return sb.toString();
}
so you can use:
"B-" + // prefix
addPadding(2, LoginActivity.strEventID) + "-" + // eventID
addPadding(2, LoginActivity.strOperativeID) + "-" + // operativeID
getNextNumber() + // counter
".jpg"
There are lots of other possibilities to pad a String, see this question for more details/possibilities.
public static String convert(int n){
return n < 10 ? "0" + n : "" + n;
}
http://openbook.galileocomputing.de/javainsel/javainsel_04_011.html#dodtp6223d54a-d5d8-4ea7-a487-03f519d21c6b
Just use a formatter. I think this is the easiest and most accurate approach
Related
There is a sorted multi set of N integers where N<26, for example:
[1x4,2,5x2,6x2,15,55]
And some sum - for example 10. I would like to get maximum number of sub multi sets from above set that are at least equal to given sum. For example:
[1x3 + 2 + 5] = 10 - first sub multi set
[5 + 6] = 11 - second multi set
[15] - third multi set
[55] - fourth multi set
1,6 - leftovers.
(but as you can see this is not the only answer).
What is the best way to approach this problem? I'm trying to solve this problem in java but any solution with explanation would be appreciated.
Edit:
Currently I am trying below approach:
Create single element multi sets that are higher or equal too sum. Remove them from original set.
Find 2 element sub multi sets that are exactly equal to sum. Remove them from original set <- I'm at this point
And now I do not know how to progress or is my approach correct.
The question is in which point should I start accepting sub multi sets that are higher than sum and how to check if this wont cause loss of some multi sets that would be possible to create otherwise?
For now I have something like this:
private static String findAndRemoveMultisetsEqualTo(SortedMultiset<Integer> numbers, int searchForSum) {
String answer = "";
if (numbers.lastEntry().getElement() >= searchForSum) {
answer += "\nSet of " + searchForSum + " [" + numbers.lastEntry().getElement() + "]";
numbers.remove(numbers.lastEntry().getElement());
answer += " => " + String.valueOf(numbers);
return answer;
} else {
answer += findAndRemoveExactPairSumInMultiSet(numbers, searchForSum);
}
return answer;
}
private static String findAndRemoveExactPairSumInMultiSet(SortedMultiset<Integer> numbers, final int searchForSum) {
String answer = "";
List<Integer> tempList = numbers.stream().filter(number -> number <= (searchForSum / 2)).collect(Collectors.toList());
for (Integer number : tempList) {
if (numbers.contains(searchForSum - number) && (!number.equals(searchForSum - number))) {
answer += "\nSet of " + searchForSum + " [" + number + "," + (searchForSum-number) + "]";
numbers.remove(number);
numbers.remove(searchForSum - number);
answer += " => " + String.valueOf(numbers);
} else if (number.equals(searchForSum - number) && numbers.contains(number) && numbers.count(number) > 1) {
answer += "\nSet of " + searchForSum + " [" + number + "," + number + "]";
numbers.remove(number, 2);
answer += " => " + String.valueOf(numbers);
}
}
return answer;
}
I know that it is a horrible question to ask at this forum since I do know the rules but at the moment I just do not know what the issue is here. So for anyone that has some spare time I would be very thankful if it could be answered. I tried to carry out the Euler Project exercise number 13: Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
I know the logic that I have used behind it is not the best and later I managed to solve the problem using another method, but it still bothers me until today why does the following code not work:
import java.util.ArrayList;
public class LargeSum {
public static ArrayList<String> addAll(ArrayList<ArrayList<Integer>> listOfResults) {
ArrayList<String> result = new ArrayList<String>();
int singlesum = 0;
int remainder = 0;
for (int i = 49; i >= 0; i--) {
System.out.println(remainder + "to rem");
singlesum += remainder;
for (ArrayList<Integer> list : listOfResults) {
System.out.println(list.get(i));
singlesum += list.get(i);
}
String lastChar = String.valueOf(singlesum);
singlesum = 0;
result.add(String.valueOf(lastChar.charAt(lastChar.length() - 1)));
remainder = 0;
if (lastChar.length() > 1) {
remainder = Integer.parseInt(lastChar.substring(0, lastChar.length() - 1));
}
}
if (remainder > 0)
result.add(String.valueOf(remainder));
return result;
}
public static ArrayList<ArrayList<Integer>> createLists() {
ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>();
String c =
"37107287533902102798797998220837590246510135740250"
+ "46376937677490009712648124896970078050417018260538"
+ "74324986199524741059474233309513058123726617309629"
+ "91942213363574161572522430563301811072406154908250"
+ "23067588207539346171171980310421047513778063246676"
+ "89261670696623633820136378418383684178734361726757"
+ "28112879812849979408065481931592621691275889832738"
+ "44274228917432520321923589422876796487670272189318"
+ "47451445736001306439091167216856844588711603153276"
+ "70386486105843025439939619828917593665686757934951"
+ "62176457141856560629502157223196586755079324193331"
+ "64906352462741904929101432445813822663347944758178"
+ "92575867718337217661963751590579239728245598838407"
+ "58203565325359399008402633568948830189458628227828"
+ "80181199384826282014278194139940567587151170094390"
+ "35398664372827112653829987240784473053190104293586"
+ "86515506006295864861532075273371959191420517255829"
+ "71693888707715466499115593487603532921714970056938"
+ "54370070576826684624621495650076471787294438377604"
+ "53282654108756828443191190634694037855217779295145"
+ "36123272525000296071075082563815656710885258350721"
+ "45876576172410976447339110607218265236877223636045"
+ "17423706905851860660448207621209813287860733969412"
+ "81142660418086830619328460811191061556940512689692"
+ "51934325451728388641918047049293215058642563049483"
+ "62467221648435076201727918039944693004732956340691"
+ "15732444386908125794514089057706229429197107928209"
+ "55037687525678773091862540744969844508330393682126"
+ "18336384825330154686196124348767681297534375946515"
+ "80386287592878490201521685554828717201219257766954"
+ "78182833757993103614740356856449095527097864797581"
+ "16726320100436897842553539920931837441497806860984"
+ "48403098129077791799088218795327364475675590848030"
+ "87086987551392711854517078544161852424320693150332"
+ "59959406895756536782107074926966537676326235447210"
+ "69793950679652694742597709739166693763042633987085"
+ "41052684708299085211399427365734116182760315001271"
+ "65378607361501080857009149939512557028198746004375"
+ "35829035317434717326932123578154982629742552737307"
+ "94953759765105305946966067683156574377167401875275"
+ "88902802571733229619176668713819931811048770190271"
+ "25267680276078003013678680992525463401061632866526"
+ "36270218540497705585629946580636237993140746255962"
+ "24074486908231174977792365466257246923322810917141"
+ "91430288197103288597806669760892938638285025333403"
+ "34413065578016127815921815005561868836468420090470"
+ "23053081172816430487623791969842487255036638784583"
+ "11487696932154902810424020138335124462181441773470"
+ "63783299490636259666498587618221225225512486764533"
+ "67720186971698544312419572409913959008952310058822"
+ "95548255300263520781532296796249481641953868218774"
+ "76085327132285723110424803456124867697064507995236"
+ "37774242535411291684276865538926205024910326572967"
+ "23701913275725675285653248258265463092207058596522"
+ "29798860272258331913126375147341994889534765745501"
+ "18495701454879288984856827726077713721403798879715"
+ "38298203783031473527721580348144513491373226651381"
+ "34829543829199918180278916522431027392251122869539"
+ "40957953066405232632538044100059654939159879593635"
+ "29746152185502371307642255121183693803580388584903"
+ "41698116222072977186158236678424689157993532961922"
+ "62467957194401269043877107275048102390895523597457"
+ "23189706772547915061505504953922979530901129967519"
+ "86188088225875314529584099251203829009407770775672"
+ "11306739708304724483816533873502340845647058077308"
+ "82959174767140363198008187129011875491310547126581"
+ "97623331044818386269515456334926366572897563400500"
+ "42846280183517070527831839425882145521227251250327"
+ "55121603546981200581762165212827652751691296897789"
+ "32238195734329339946437501907836945765883352399886"
+ "75506164965184775180738168837861091527357929701337"
+ "62177842752192623401942399639168044983993173312731"
+ "32924185707147349566916674687634660915035914677504"
+ "99518671430235219628894890102423325116913619626622"
+ "73267460800591547471830798392868535206946944540724"
+ "76841822524674417161514036427982273348055556214818"
+ "97142617910342598647204516893989422179826088076852"
+ "87783646182799346313767754307809363333018982642090"
+ "10848802521674670883215120185883543223812876952786"
+ "71329612474782464538636993009049310363619763878039"
+ "62184073572399794223406235393808339651327408011116"
+ "66627891981488087797941876876144230030984490851411"
+ "60661826293682836764744779239180335110989069790714"
+ "85786944089552990653640447425576083659976645795096"
+ "66024396409905389607120198219976047599490197230297"
+ "64913982680032973156037120041377903785566085089252"
+ "16730939319872750275468906903707539413042652315011"
+ "94809377245048795150954100921645863754710598436791"
+ "78639167021187492431995700641917969777599028300699"
+ "15368713711936614952811305876380278410754449733078"
+ "40789923115535562561142322423255033685442488917353"
+ "44889911501440648020369068063960672322193204149535"
+ "41503128880339536053299340368006977710650566631954"
+ "81234880673210146739058568557934581403627822703280"
+ "82616570773948327592232845941706525094512325230608"
+ "22918802058777319719839450180888072429661980811197"
+ "77158542502016545090413245809786882778948721859617"
+ "72107838435069186155435662884062257473692284509516"
+ "20849603980134001723930671666823555245252804609722";
for (int i = 0; i < 4950; i += 50) {
ArrayList<Integer> strings = new ArrayList<Integer>();
for (int j = i; j <= i + 49; j++) {
strings.add(Integer.parseInt(String.valueOf(c.charAt(j))));
}
results.add(strings);
}
return results;
}
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> results = createLists();
System.out.println(addAll(results));
}
}
The array should give me the number from the back one by one each digit of the number yet I do not get the answer to the question. I investigated this many times for smaller numbers (where it worked) and for only two numbers (and it worked) yet I cannot get the answer to the question (I always get another number as result not the designated Result: 5537376230).
Thanks to everybody that looks at the code.
Best regards,
Rob
I believe the main source of the issue lies in the fact that you hardcoded a lot of numerical values and thus can not really verify correctness in the middle steps. Especially bad idea is using single String instead of the array of String[] for your source data.
Anyway, if you re-check the task you may find that the last numbers are:
...
72107838435069186155435662884062257473692284509516
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690
while in your code you have:
+ "72107838435069186155435662884062257473692284509516"
+ "20849603980134001723930671666823555245252804609722";
So you just missed the last number and that spoils the result.
Sidenotes:
you don't really handle the top digits (your "top" digit is "55") properly which is a result of a lot of hardcoding but you probably already know that.
In java there is a BigInteger class that can solves this task easily. It is OK to write your own code for learning but for the real world task you should use a standard library unless you have a good reason not to use it.
In the case where you have a remainder left over, you add it to result as a string. But the digits in your results are reversed, so you also need to reverse the digits of the remainder.
It also looks like you've got an off-by-one error in the construction of your numbers. i < 4950 should be i < 5000 I think, since the 100th number starts at index 99 * 50 = 4950.
I have to create an output with 5 columns
Like This
The problem i've been having is that I keep getting errors (something about an array and a string) but we haven't covered arrays yet. This is what I have so far:
System.out.println("Game\tResult\t\t\tValue\tBooby Prize\t\tDescription");
System.out.printf("1",prize1Result,prize1Value(prize1BoobyPrize?"yes":"no"),prize1Desc);
*all the variables are correct (case etc.
The second line is causing the error, and it still needs to be formatted.
The problem with using tab is that it only brings the cursor to the next interval of 4 on a line. Instead you should use String::format and pad every string by the same amount
public static String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
...
int paddingLength = 12;
System.out.println(
padRight("Game", paddingLength) +
padRight("Result", paddingLength) +
padRight("Value", paddingLength) +
padRight("Booby Prize", paddingLength) +
padRight("Description", paddingLength)
);
System.out.println(
padRight("1", paddingLength) +
padRight(prize1Result, paddingLength) +
padRight(prize1Value, paddingLength) +
padRight(prize1BoobyPrize?"yes":"no", paddingLength) +
padRight(prize1Desc, paddingLength)
);
Just starting learning java today and can't seem to figure this out. I am following the tutorial on learnjavaonline.org which teaches you a few things and then asks you to write a code to do a specific thing, it then checks the output to see if its correct. The thing is, if its not correct, it doesn't say why, or give you an example of the correct code.
It wants me to output a string saying "H3110 w0r1d 2.0 true" using all of the primitives
i came up with this
public class Main {
public static void main(String[] args) {
char h = 'H';
byte three = 3;
short one = 1;
boolean t = true;
double ten = 10;
float two = (float) 2.0;
long won = 1;
int zero = 0;
String output = h + three + one + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t;
System.out.println(output);
}
}
but it outputs 86.0 w0r1d 2.0 true
how can i make it so it doesn't add all the integers, but displays them consecutively?
The problem with this line:
String output = h + three + one + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t;
is that operations are performed left to right, so it first sums h + three (which evaluates to an int) and then one and then ten. Up to that point you have a numerical value (an int) that then will be "summed" to a String. Try something like this:
String output = "" + h + three + one + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t;
In this second case your expression will start with a String object, evaluating the rest of the operations as Strings.
You of course could use "" at the beginning or any other value that evaluates to String, like String.valueOf(h). In this last case you wouldn't need to use String.valueOf() for the other operands, as the first one is already a String.
You can either convert your numbers into a string using the toString or valueOf methods of the wrapper classes (guess you are not there yet), or just stuff all your primitives into the printline without the String output.
system.out.println(h + three + one + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t);
All you need to look for is that there is a String in the printline statement. Meaning if you only want to print our number based datatype you can use system.out.println("" + youNumberVariable).
There would also be the option to add an empty string at the beginning of your declaration of output output = "" + theRest; to force all following values into the string like it does in the printline statement.
Most of it is not very pretty coding but will completly suffice for the learning process.
An easy and ugly way to do this would be to use String.valueOf for each numerical value.
As in:
String output = h + String.valueOf(three); // + etc...
Edit
morgano's approach is perfectly valid as well - +1 for that.
On a more general topic, you might want to use String.concat for String concatenation, or even better, a StringBuilder object.
This SO page contains a lot of info you can use on the matter.
I would use String.valueOf to explicitly cast each numeric value to String before being added. Like so:
String output = h + String.valueOf( three ) + String.valueOf( one ) + String.valueOf( ten ) + " " + "w" + String.valueOf( zero ) + "r" + String.valueOf( won ) + "d " + String.valueOf( two ) + " " + t;
The trick is to get the compiler to interpret + as string concatenation (which then silently convert the numbers to strings) instead of adding two numbers. This mean that one of the two arguments to + must be a string, and not - as your first three arguments - numbers (and yes, a char is a number).
It is not typical in code in the wild to want numbers to be directly adjacent to each other, but have a space between them, like:
String output = h + " " + three + " " + one + " " + ten + " " + "w" + zero + "r" + won + "d " + two + " " + t;
If you really want to have no spaces, then just let the first argument be the empty string:
String output = "" + h ....
You could also just change h from char to String.
The result you're getting is because, essentially, you're doing arithmetical operations on numeric variable before printing them when relying on implicit casting.
Even the Char is a numeral! H has the value 72 in the ascii table, so you are basically instructing the Java program to print the result of:
72 + 3 + 1 + 10.0 (which is equal to 86.0)
String concatenation with mixed inputs of numerals and symbols like this can be problematic since implicit casting is in play.
In order to make sure stuff is as you want, without using explicit casting, maybe use either strings between each numeric value, like this:
char h = 'H'; // This is a numeral! Capital H has value 72 in Ascii table
byte three = 3;
short one = 1;
boolean t = true; // not a numeral
double ten = 10;
float two = (float) 2.0;
long lOne = 1;
int zero = 0;
System.out.println(h + "" + three + "" + one + "" + (int) ten + " w"
+ zero + "r" + lOne + "d " + two + " " + t );
Note how I needed to cast ten to the int-type, to lose the decimal...
Above example is however not a good example of using string concatenations!
For a proper solution, and this is maybe more aimed at people with more experience, is to try using String formatting, like this:
System.out.println(String.format("%s%s%s%s w%sr%sd %s %s", h, three, one,
(int) ten, zero, lOne, two, t));
Another way is to use message formatting like this, maybe not the best choice for this assignment since the float will be printed as an integer. Also needs to import java.text.MessageFormat
// please note: the double and the float won't print decimals!
// note: import java.text.MessageFormat for this
System.out.println(MessageFormat.format("{0}{1}{2}{3} w{4}r{5}d {6} {7}", h,
three, one, (int) ten, zero, lOne, two, t));
More examples from the Ascii table.
public class Main {
public static void main(String[] args) {
int b = 3110;
int d = 0;
String e = "orld";
double f = 2;
boolean g = true;
System.out.println("H" + b + " " + "w" + d + e + " " + f + " " + g);
}
}
Basically I am trying to create a new class as long as the continue variable equals "Y". The problem I am having is
DigitalMain.java:18: not a statement
DigitalPhoto[] class = new DigitalPhoto[9];
upon compile. I have looked at ArrayLists but I am not quite sure if they would instantiate classes the same way as what I am trying to achieve. In an ideal situation I would have objects with the name "class"+i, and different values for every object via their built in set methods.
// Import classes for class
import java.util.Arrays;
import java.util.List;
import javax.swing.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class DigitalMain
{
public static void main(String args[])
{
String cont = "Y";
String heightString,widthString,width,bitpsString;
double bitps,x,y,totesPrice,totesSize,totesSpeed;
DecimalFormat wholeDigits = new DecimalFormat("0");
DecimalFormat dec = new DecimalFormat("0.00");
DigitalPhoto[] picc = new DigitalPhoto[20];
for(int i=0; cont.equals("Y") ; i++)
{
picc[i] = new DigitalPhoto();
heightString = JOptionPane.showInputDialog("Please enter height");
picc[i].setHeight = Double.parseDouble(heightString);
heightString = JOptionPane.showInputDialog("Please enter width");
picc[i].setWidth = Double.parseDouble(widthString);
continueQuestion = JOptionPane.showInputDialog("Height: " + picc[i].getHeight + "\n Width: " + picc[i].getWidth + "\n Resolution: " + picc[i].getResolution + "\n Compression Ratio: " + picc[i].getCompression + "\n Required Storage: " + picc[i].calcStorage() + "\n Price of Scanned Photo: " + picc[i].getCost() + "Please enter 'Y' to try again or anything but 'Y' to accept values.");
};
do
{
bitpsString = JOptionPane.showInputDialog("Please enter your internet connection speed. Must be an integer between 1 and 99999999");
bitps = Double.parseDouble(bitpsString);
} while (bitps > 0 && bitps < 99999999);
picc0.setSpeed(bitps);
for(y = 0; y<picc.length; y++) {
totesPrice += picc+y.getCost();
totesSize += picc+y.calcStorage();
totesSpeed = picc0.getSpeed();
}
double seconds = transferTime(totesSize, totesSpeed);
double minutes = seconds / 60;
double realsec = seconds % 60;
JOptionPane.showMessageDialog(null, "You will be paying: " + totesPrice + "\nRequired Storage is: " + totesSize + "Required time for transfer is: " + wholeDigits.format(minutes) + " minutes, and " + wholeDigits.format(realsec) + " seconds.");
}
public static double transferTime(double totalStorage, double netSpeed) {
double bits, seconds;
bits = (totalStorage * 8);
seconds = (bits / netSpeed);
return seconds;
};
}
class is a keyword - you can't use it as a variable name.
Additionally, you have an odd construct here:
for(int i=0; cont.equals("Y") ; i++)
{
...
} while {continue.equalsIgnoreCase(Y)};
There's no such thing as a "for/while" loop - there's a normal for loop, a while loop, and a do/while loop.
So you've actually got a for loop followed by an invalid while loop here. It has no condition.
You need to work out which you want. (Possibly a for loop containing a do/while loop, although I'd extract the inner loop into a separate method. In general your code would greatly benefit from being broken out into multiple methods.
You do something similar later, although this time with do/while:
do
{
...
} while {bitps > 0 && bitps < 99999999};
The condition of a while loop goes in round brackets, not braces:
do
{
...
} while (bitps > 0 && bitps < 99999999);
Basically, you should read up on the syntax options available for loops.
The issue is most likely the name of your array. The word class is a keyword in the Java language and hence cannot be used to name variables. You can also use ArrayLists like so:
List<DigitalPhoto> photoes = new ArrayList<DigitalPhoto>();
do
{
DigitalPhoto photo = new DigitalPhoto();
heightString = JOptionPane.showInputDialog('Please enter height');
photo .setHeight = double.parseDouble(heightString);
heightString = JOptionPane.showInputDialog('Please enter width');
photo .setWidth = double.parseDouble(widthtString);
photos.add(photo)
continueQuestion = JOptionPane.showInputDialog('Height: ' + class[i].getHeight + '\n\lWidth: ' + class[i].getWidth + '\n\l Resolution: ' + class[i].getResolution + '\n\lCompression Ratio: ' + class[i].getCompression + '\n\lRequired Storage: ' + class[i].calcStorage() + '\n\lPrice of Scanned Photo: ' + class[i].getCost() + 'Please enter "Y" to try again or anything but "Y" to accept values.')
} while {cont.equals("Y")};
What kind of loop you are using.
for(...)
{
...
}while();
There is no for-while loop.
And also your for loop condition never going to become false. Set a proper condition to your for loop.
Also there is syntax error in your for-while loop. ie. last statement
continueQuestion = JOptionPane.showInputDialog('Height: ' + class[i].getHeight + '\n\lWidth: ' + class[i].getWidth + '\n\l Resolution: ' + class[i].getResolution + '\n\lCompression Ratio: ' + class[i].getCompression + '\n\lRequired Storage: ' + class[i].calcStorage() + '\n\lPrice of Scanned Photo: ' + class[i].getCost() + 'Please enter "Y" to try again or anything but "Y" to accept values.') // you miss the ;
there is some rules for naming of variables Variables
You cannot use any of the following(in list of keywords) as identifiers in your
programs.The keywords const and goto are reserved, even though they are not
currently used. true, false, and null might seem like keywords, but they
are actually literals; you cannot use them as identifiers in your programs.
List of keywords
for(int i=0; cont.equals("Y") ; i++)
{
class[i] = new DigitalPhoto();
heightString = JOptionPane.showInputDialog('Please enter height');
class[i].setHeight = double.parseDouble(heightString);
heightString = JOptionPane.showInputDialog('Please enter width');
class[i].setWidth = double.parseDouble(widthtString);
continueQuestion = JOptionPane.showInputDialog('Height: ' +
class[i].getHeight + '\n\lWidth: ' + class[i].getWidth + '\n\l Resolution: ' +
class[i].getResolution + '\n\lCompression Ratio: ' + class[i].getCompression +
'\n\lRequired Storage: ' + class[i].calcStorage() + '\n\lPrice of Scanned Photo: ' +
class[i].getCost() + 'Please enter "Y" to
try again or anything but "Y" to accept values.')
} while {continue.equalsIgnoreCase(Y)};
here i dont know any for-while loop..just check some basics..
Loops in java