0

私は、ユーザーのインターネット速度と写真の幅と高さを受け入れる写真プログラムを書いています。次に、プログラムは、コスト、ストレージサイズ、および転送時間を表示します。プログラムを2つの部分に分割します。1つは値を設定し、1つはすべてのメソッドを持つクラスです。

私がプログラムで抱えている主な問題は、入力されたすべての写真のすべての値を合計し、最後に価格、ストレージ、および時間を表示することです。

これまでのところ、設定した値に時間、価格、ストレージを追加するaddTotal()メソッドがあります。ただし、最後に入力した写真の値が、すべての写真の合計ではなく表示され続けるということが起こり続けています。

例:インターネット速度が150,000に設定されていて、サイズが4,5と4.5,4.5の写真が2枚ある場合、最後に表示されるのは次のとおりです。

総費用=$4.83

4.14Mバイトのストレージ

転送するのに3分40秒

どんな助けでも大歓迎です。

メインプログラムは次のとおりです。

import javax.swing.JOptionPane;
{
public static void main(String args[])
{
double speed;
double height;
double width;
double compression = 3.5;
double resolution = 600;

System.out.println("Welcome to the Scans-R-Us Digital Photo Shop!");
String userInput = JOptionPane.showInputDialog("Do you have a photo you would like us to scan(Yes or No)?");

while((!userInput.equals("Yes") && (!userInput.equals("YES")) && (!userInput.equals("yes"))))   
    {
    System.out.println("test");
    System.exit(0);
    }
    do  
    {
    String internetString = JOptionPane.showInputDialog("What is your internet speed in bits/second?");
    speed = Double.parseDouble(internetString);
    }
    while(speed < 0);

while((userInput.compareTo("No") != 0) && (userInput.compareTo("NO") != 0) && (userInput.compareTo("no") != 0))
    {
    DigitalPhoto one = new DigitalPhoto();

    do
    {
    String heightString = JOptionPane.showInputDialog("What is the height of the photo?");
    height = Double.parseDouble(heightString);
    }
    while(height >=8);

    do
    {
    String widthString = JOptionPane.showInputDialog("What is the width of the photo?");
    width = Double.parseDouble(widthString);
    }
    while(width >= 8);

    one.setWidth(width);
    one.setHeight(height);
    one.setSpeed(speed);
    one.setCompression(compression);
    one.setResolution(resolution);
    one.setPrice();
    one.setStorage();
    one.setTime();
    one.showValues();
    one.addTotal(); 

    userInput = JOptionPane.showInputDialog("Do you have a photo you would like us to scan(Yes or No)?");

    while((!userInput.equals("Yes") && (!userInput.equals("YES")) && (!userInput.equals("yes"))))
    {
    one.endValues();
    System.out.println("\nThanks, have a nice day!");
    System.exit(0);
    }
 }  
}
}

そして、これが私がプログラムを実行するために使用しているクラスです:

import javax.swing.JOptionPane;
{   
double total;
double width;
double height;
double speed;
double compression;
double resolution; 
double price;
double time;
double totalPrice;
double totalStorage;
double totalTime;
double pricePerInch = .12;
int bytes = 8;
int megaSize = 1000000;

DigitalPhoto()
{
width = 0.0;
height = 0.0; 
speed = 0.0;
compression = 0.0;
resolution = 0.0;
total = 0.0;
price = 0.0;
time = 0.0;
}

public void setWidth(double thisWidth)
{
width = thisWidth;
}

public void setHeight(double thisHeight)
{
height = thisHeight;
}

public void setSpeed(double thisSpeed)
{
speed = thisSpeed;
}

public void setCompression(double thisCompression)
{
compression = thisCompression;
}

public void setResolution(double thisResolution)
{
resolution = thisResolution;
}

public double getWidth()
{
return width;
}

public double getHeight()
{
return height;
}

public double getSpeed()
{
return speed;
}

public double getCompression()
{
return compression;
}

public double getResolution()
{
return resolution;
}

public double setStorage()
{
width = width * resolution;
height = height * resolution;
total = width * height;
total = total / compression;
total = total / megaSize;
return total;
}

public double setPrice()
{
price = height * width;
price = price * pricePerInch;
return price;
}

public double setTime()
{
total = total * megaSize;
time = total * bytes;
time = time / speed;
total = total / megaSize;
return time;
}

public void showValues()
{
System.out.println("\nScanned photo details: ");
System.out.println("Resolution: " + resolution);
System.out.println("Compression ratio: " + compression);
System.out.println("The customer photos require " + total + " Mbytes of storage.");
System.out.println("The customer photos cost $" + price);
System.out.println("It will take " + (int)time / 60 + " minutes and " + (int)time % 60 + " seconds");
}

public void addTotal()
{
totalTime = totalTime + time;
totalPrice = totalPrice + price;
totalStorage = totalStorage + total;
}

public void endValues()
{
System.out.println("\nThe  photos require " + totalStorage + " Mbytes of storage.");
System.out.println("The  photos cost $" + totalPrice);
System.out.println("It will take " + (int)totalTime / 60 + " minutes and " + (int)totalTime % 60 + " seconds");
}
}
4

1 に答える 1

1

ループに入るたびに新しいオブジェクトを作成しているので、最後のオブジェクトのみを保持します。ループの前にオブジェクトを作成する必要があります。

DigitalPhoto one = new DigitalPhoto();
while((userInput.compareTo("No") != 0) && (userInput.compareTo("NO") != 0) &&
   (userInput.compareTo("no") != 0)) {
  //...
  one.setPrice();
  //...
  one.addTotal();
}

次に、ループの終了後に結果をクエリします。

于 2012-05-01T18:14:43.693 に答える