尝试在for循环中实例化对象并失败

基本上我只是在继续变量等于“Y”时尝试创建一个新类。 我遇到的问题是

DigitalMain.java:18: not a statement DigitalPhoto[] class = new DigitalPhoto[9]; 

在编译时。 我看过ArrayLists,但我不太确定它们是否会像我想要实现的那样实例化类。 在理想情况下,我会使用名为“class”+ i的对象,并通过其内置的set方法为每个对象提供不同的值。

 // 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; }; } 

问题很可能是您的arrays的名称。 单词class是Java语言中的关键字,因此不能用于命名变量。 你也可以像这样使用ArrayLists

 List photoes = new ArrayList(); 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")}; 

class是一个关键字 – 您不能将其用作变量名。

另外,你有一个奇怪的构造:

 for(int i=0; cont.equals("Y") ; i++) { ... } while {continue.equalsIgnoreCase(Y)}; 

没有“for / while”循环这样的东西 – 有一个正常的for循环,一个while循环和一个do / while循环。

所以你实际上有一个for循环,然后是一个无效的while循环。 它没有条件。

你需要找出你想要的东西。 (可能是一个包含 do / while循环的for循环,虽然我将内循环提取到一个单独的方法中。一般来说,你的代码可以通过分解成多个方法而大大受益。

你稍后会做类似的事情,虽然这次是do / while

 do { ... } while {bitps > 0 && bitps < 99999999}; 

while循环的条件是圆括号,而不是括号:

 do { ... } while (bitps > 0 && bitps < 99999999); 

基本上,您应该阅读可用于循环的语法选项。

你正在使用什么样的循环。

 for(...) { ... }while(); 

没有for-while循环。

而你的for循环条件永远不会变错。 为你的for循环设置一个合适的条件。
您的for-while循环中也存在语法错误。 即。 最后声明

 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 ; 

命名变量变量有一些规则

  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. 

关键字列表

 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)}; 

在这里,我不知道任何for-while循环..只是检查一些基础..
java中的循环