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

时间:2012-04-30 05:19:38

标签: java object loops for-loop

基本上,只要continue变量等于“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;
    };
}

4 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

您稍后会做类似的事情,尽管这次是do / while

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

while循环的条件位于 round 括号中,而不是大括号:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您正在使用什么类型的循环。

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 ;     

答案 3 :(得分:0)

有一些规则用于命名变量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)};

这里我不知道任何for-while循环。只需检查一些基础知识。
Loops in java