1. ホーム
  2. java

[解決済み] Javaによる温度プログラムのクラス宣言

2022-01-29 17:13:02

質問事項

この5つのメソッドを入力する必要があるのですが、これが問題です。

  • Temperature - コンストラクタのメソッドです。これは初期温度を100に設定する必要があります。
  • getTemp - 現在保存されている摂氏の値を返すメソッドです。
  • convertToF - 摂氏の温度を華氏に変換するメソッドです。
  • convertToK - 摂氏の温度をケルビン温度に変換するメソッド
  • updateTempC - 保存されている温度を摂氏で更新するメソッドです。

をこのプログラムに追加します。

import java.util.Scanner;

public class TempProg {



public static void main(String[] args)
{

    // Declare objects
    Scanner scan = new Scanner(System.in);
    Temperature tempConv = new Temperature();

    // Declare variables
    int newTemp;
    boolean entryValid;

    // Declare constants
    final int MIN_TEMP = -273;
    final int MAX_TEMP = 10000;

    System.out.println("\tTemperature converter");

    // Set a dummy selection value, so that we always show the options on the first go
    char selection = 'x';

    // Offer a list of options
    while (selection != 'q') { 
        System.out.println("\n\tCurrent temperature in degrees C: " + tempConv.getTemp());
        System.out.println("\tType f to display temperature in Fahrenheit");
        System.out.println("\tType k to display temperature in Kelvin");
        System.out.println("\tType c to set a new temperature");
        System.out.println("\tType q to quit");

        // Read from the keyboard
        selection = scan.next().charAt(0);


        // Act on the selection
        switch(selection) {
            case 'f': // Print Fahrenheit version
                System.out.println("\n\t" +tempConv.getTemp()+ " degrees C = "+tempConv.convertToF() +" degrees F" );
                break;

            case 'k': // Print Kelvin version 
                System.out.println("\n\t" +tempConv.getTemp()+ " degrees C = "+tempConv.convertToK() +" degrees K" );
                break;

            case 'c': // Get a new temperature

                entryValid=false; // Reset entryValid for this round

                /* test for !entryValid
                 * i.e. "not entryValid"
                 * i.e. same as "entryValid == false"
                 */

                while (!entryValid) { // This will always be true the first time
                    System.out.print("\n\tPlease enter a new temperature: ");
                    newTemp = scan.nextInt();

                    // Check validity of new temperature
                    if (newTemp < MIN_TEMP || newTemp > MAX_TEMP) {
                        System.out.println("\tPlease enter a valid temperature");
                    } else {
                        entryValid=true;
                        tempConv.updateTempC(newTemp);
                    }
                }

                break;

            case 'q': // Don't do anything for q, we print a message later
                break;

            default: // If it is not f, k, c or q then default is error message
                System.out.println("\n\tOption " + selection + " not understood");
        }
    }
    System.out.println("\n\tPROGRAM ENDED");
}
}

そして、これが今のところあるものです。

private double Temperature (double currentTemp)
    {
        currentTemp = 100;
        return currentTemp;

    }

    public double convertToF (double TempF)
    {
        TempF = ((9 * currentTemp) / 5 ) + 32;
        return TempF();
    }

    public double convertToK (double TempK)
    {
        TempK = currentTemp + 273;
        return TempK();
    }

    public void updateTempC (double currentTemp)
    {
        newTemp = currentTemp;

        return currentTemp();
    }

    public double getTemp()
    {
        return currentTemp;
     }

このような場合、基本的にコンパイルできませんし、99%間違っていると確信しています。

とエラーが出ます。

    tempProg.java:14: error: class TempProg is public, should be declared in a file named            TempProg.java
public class TempProg {
       ^
    tempProg.java:26: error: cannot find symbol
            TempF = ((9 * currentTemp) / 5 ) + 32;
                          ^
  symbol:   variable currentTemp
  location: class TempProg
    tempProg.java:27: error: cannot find symbol
            return TempF();
                   ^
  symbol:   method TempF()
  location: class TempProg
    tempProg.java:32: error: cannot find symbol
            TempK = currentTemp + 273;
                    ^
  symbol:   variable currentTemp
  location: class TempProg
    tempProg.java:33: error: cannot find symbol
            return TempK();
                   ^
  symbol:   method TempK()
  location: class TempProg
    tempProg.java:38: error: cannot find symbol
            newTemp = currentTemp;
            ^
  symbol:   variable newTemp
  location: class TempProg
    tempProg.java:40: error: cannot return a value from method whose result type is void
            return currentTemp();
                              ^
    tempProg.java:45: error: cannot find symbol
            return currentTemp;
                   ^
  symbol:   variable currentTemp
  location: class TempProg
    tempProg.java:54: error: cannot find symbol
        Temperature tempConv = new Temperature();
        ^
  symbol:   class Temperature
  location: class TempProg
    tempProg.java:54: error: cannot find symbol
        Temperature tempConv = new Temperature();
                                   ^
  symbol:   class Temperature
  location: class TempProg

解決方法は?

を使用する必要があります。 Temperature クラスがあります。推測ですが、これらのメソッドを TempProg を考えると、不適切なコンストラクタと言えます。必要なのは、このような別のクラスです...。

public class Temperature {
  // Put those method and data members here
}

コンストラクタは値を返してはいけません。次のようになります。 public Temperature() または、特定の要件に応じたいくつかのバリエーションがあります。