программа преобразования температуры Java не работает - PullRequest
0 голосов
/ 17 октября 2019

У меня есть задание на введение в класс программирования, который я беру, и у меня нет ошибок, но он все еще не работает должным образом. Задача состоит в том, чтобы написать программу, которая конвертирует температуру как из градусов Цельсия в градусы Фаренгейта, так и наоборот. Это также должно быть сделано разными способами, а затем должно выполняться снова и снова. В этой части у меня сейчас проблема. строка

if(retry == y)

не работает должным образом. Заранее спасибо.

package cps101temperatureconverter;
import static 
cps101temperatureconverter.CPS101TemperatureConverter.enteredTemp;
import java.util.Scanner;

public class CPS101TemperatureConverter 
{

//char inputChoice;
int input;
static double enteredTemp;
static double calculatedTemp;
static char retry = 'y';
static Boolean moreToProcess = true;
static double fahrenheitTemp;
static double celsiusTemp;
Scanner keyboard = new Scanner(System.in);
static char c = 'C';
static char f = 'F';

public static void main(String[] args) 
{
    char inputChoice;
    Scanner keyboard = new Scanner(System.in);
    String inputTempString;
    String inputTypeString;
    String retryString;
    //char retry = 'y';

    do
    {


    System.out.println("This program will convert temperatures.");
    System.out.println("Please Enter a Temperature: ");
    inputTempString= keyboard.nextLine();
    enteredTemp = Double.parseDouble(inputTempString);
    System.out.println("You have entered " + enteredTemp);
    System.out.println("Is this value in (C)elsius or (F)ahrenheit? ");
    inputTypeString = keyboard.nextLine();
    inputChoice = inputTypeString.charAt(0);

    if (inputChoice == c)
    {
        CelsiusToFahrenheit();
    }
    else if (inputChoice == f)
    {
        FahrenheitToCelsius();
    }
    else
    {
        System.out.println("You have entered an invalid answer. Please try again.");
    }
    System.out.println("Would you like to convert another temperature? Enter yes or no. ");
    retryString = keyboard.nextLine();
    retry = retryString.charAt(0);
    if (retry == y)
    {
        moreToProcess = true;
    }
    else{
        moreToProcess = false;
    }
    }while(moreToProcess = true);

    System.out.println("The Program will terminate now.");

}

static void CelsiusToFahrenheit()
{
    calculatedTemp = (9.0/5.0)*enteredTemp + 32;
    System.out.println(enteredTemp + " converted to Fahrenheit is " + calculatedTemp);
}
static void FahrenheitToCelsius()
{
    calculatedTemp = (enteredTemp - 32)*(9.0/5.0);
    System.out.println(enteredTemp + " converted to Celsius is " + calculatedTemp);
}

}

Ответы [ 3 ]

2 голосов
/ 17 октября 2019

Короткий ответ: вы не инициализировали c или f. Это просто статические переменные типа char, но вы должны дать им значение для сравнения.

static char c = 'C';
static char f = 'F';

Обратите внимание, что это сравнение чувствительно к регистру;если пользователь вводит строчные буквы c или f, он не будет работать. Вы должны попытаться сделать вашу программу более четкой в ​​отношении того, какой ввод она ожидает. Может быть так:

System.out.println("Is this value in (C)elsius or (F)ahrenheit? ");

0 голосов
/ 17 октября 2019

В вашей программе было две проблемы:

  1. Не назначено static char c='c' и static char f='f'
  2. Не создано keyboard для inputTypeString

Помимо двух вышеупомянутых проблем, я также предлагаю использовать keyboard.nextDouble() (что я уже сделал в приведенной ниже программе) вместо использования Double.parseDouble(). В вашем подходе нет ничего плохого, но предлагаемый подход чище.

Еще одно предложение - преобразовать inputTypeString в нижний регистр, прежде чем вывести из него charAt(0). Это позволит пользователю вводить как строчную, так и заглавную букву (например, c или C). Я уже сделал это также в программе, приведенной ниже.

Ниже приводится рабочая программа.

import java.util.Scanner;

public class CPS101TemperatureConverter {

    int input;
    static double enteredTemp;
    static double calculatedTemp;
    char retry;
    static Boolean moreToProcess = true;
    static double fahrenheitTemp;
    static double celsiusTemp;
    Scanner keyboard = new Scanner(System.in);
    static char c='c';
    static char f='f';

    public static void main(String[] args) {
        char inputChoice;
        Scanner keyboard = new Scanner(System.in);
        String inputTypeString="";
        System.out.println("This program will convert temperatures.");
        System.out.print("Please Enter a Temperature: ");
        enteredTemp = keyboard.nextDouble();
        System.out.println("You have entered " + enteredTemp);
        System.out.print("Is this value in Celsius or Fahrenheit? ");
        keyboard = new Scanner(System.in);
        inputTypeString = keyboard.nextLine();
        System.out.println("Your choice is: "+inputTypeString);
        inputChoice = inputTypeString.toLowerCase().charAt(0);

        if (inputChoice == c) {
            CelsiusToFahrenheit();
        } else if (inputChoice == f) {
            FahrenheitToCelsius();
        } else {
            System.out.println("You have entered an invalid answer. Please try again.");
        }
    }
    static void CelsiusToFahrenheit() {
        calculatedTemp = (9.0 / 5.0) * enteredTemp + 32;
        System.out.println(enteredTemp + " converted to Fahrenheit is " + calculatedTemp);
    }
    static void FahrenheitToCelsius() {
        calculatedTemp = (enteredTemp - 32) * (9.0 / 5.0);
        System.out.println(enteredTemp + " converted to Celisu is " + calculatedTemp);
    }
}
0 голосов
/ 17 октября 2019

Ваши поля с именами c и f не определены. Попробуйте:

static char c = 'c';
static char f = 'f';

Удачи.

...