Search code examples
javaweather-api

The operator < is undefined for the argument type(s) String, int ? in java


I'm trying to make a condition in the method clothing that if temperature is < 10 then advise particular clothes but I'm getting the following error:

The operator < is undefined for the argument type(s) String, int.

So how can I use this greater than > and less than < in the clothing method below?

import java.util.Random;

import net.aksingh.owmjapis.api.APIException;
import net.aksingh.owmjapis.core.OWM;
import net.aksingh.owmjapis.model.CurrentWeather;

public class Weather {
    
    Weather Tweather = new Weather();
    // method to test the API key
    public static String owmKey() {
        return "api-key"; // api key
    }

    static CurrentWeather cwd;

    String[] highTemp = { "Shirt", "T-shirt", "Jacket", "Raincoat" };
    String[] midTemp = { "sweater", "thermal-shirt" };
    String[] lowTemp = { "Trousers", "Jeans", "Shorts" };

    public static Boolean getCity(String city) {
        /*
         * Description: This method returns the name of the city.
         * 
         * @param city: value of to be validated.
         *
         * @return : return the back the name of the city if valid.
         */

        // declaring object of "OWM" class
        OWM owm = new OWM(owmKey());

        // getting current weather data for the selected city

        try {
            cwd = owm.currentWeatherByCityName(city);
            if (cwd.hasCityId()) {
                // we then return the city name
                return true;

            }

        } catch (APIException e) {
            // returns if city doesn't exist on the OWM API
            return false;
        }
        return null; // else return null
    }

    public String temp() {
        return "The temperature of are: Max-" + (cwd.getMainData().getTempMax() - 273.15) + " / Min - "
                + (cwd.getMainData().getTempMin() - 273.15) + "\'Celsius";
    }

    public String clothing() {
        Random clothings = new Random();
        int high = clothings.nextInt(highTemp.length - 1);
        int mid = clothings.nextInt(midTemp.length - 1);
        int low = clothings.nextInt(lowTemp.length - 1);
        
        if( Tweather.temp() < 10 ) {
            return "Adviesd Clothings By CTZ: " + highTemp[high]; 
        }

        return "Adviesd Clothings By CTZ: " + highTemp[high] + " and " + midTemp[mid] + " and " + lowTemp[low];
        // return "Adviesd Clothings By CTZ: "+ highTemp[high] +" and " + midTemp[mid] +
        // " and " + lowTemp[low];
    }
}

Solution

  • In the line if( Tweather.temp() < 10 ), Tweather.temp() returns a String. I would add another method that returns the actual minimum temperature as a double. Maybe something like this:

    public double getMinTemp() {
        return cwd.getMainData().getTempMin() - 273.15;
    }
    

    Then use that method for your comparison.