• 0

[Java] Method overloading while accepting input from a user


Question

I have got a problem.

I am trying to use method overloading to find the area of a rectangle. Only thing is the values have to be entered by the user. But if it has to accepted from the user, shouldn't we know the datatype of his input? And if we do, then the purpose of overloading becomes useless, because I already know the datatype.

Can you guys help me out?

You can add onto this code:

import java.io.*;
import java.lang.*;
import java.util.*;

class mtdovrld
{
void rect(int a,int b)
{
int result = a*b;
System.out.println(result);
}

void rect(double a,double b)
{
double result = a*b;
System.out.println(result);
}
}

class rectarea
{
public static void main(String[] args)throws IOException
{
mtdovrld zo = new mtdovrld();

Scanner input= new Scanner(System.in);

System.out.println("Pleaser values:");

// Here is the problem, how can I accept values from user where I do not have to specify datatype and will still be accepted by method?
double a = input.nextDouble();
double b = input.nextDouble();

zo.rect(a,b);

}
}

5 answers to this question

Recommended Posts

  • 0

The purpose of method overloading is not to duplicate code for each possible type; in fact, anytime your design implies duplicating code, it should make you raise an eyebrow. Here, both void rect(int, int) and void rect(double, double) use the exact same code. Also, since integers are implictly convertible to doubles, when you pass an integer to the method, the compiler could flag the call as ambiguous (but in Java I'm not sure).

Since integer and double multiplication are equivalent (well, for your purposes I guess), and that doubles include integers, you could just keep the double version and drop the integer version.

If you need a version of the method unique to different argument types but that does the same thing for each type, this calls for a generic method. Something like

void <T> rect(T a, T b) {
   // use T instead of int or double
}

  • 0

Also, I think the idea of accepting input from the user without knowing what is the type of input makes no sense, unless you want to go through the trouble of analysing the raw string to identify the type (if it's digits and there's a dot somewhere, it's a double, if it's alphanumerical characters, it's a string, etc.).

  • 0

I guess this is some kind of school project that you have been set? So debating how useful it is won't help?

Anyway, I think you are right, there's no way to input a number without committing to its type.

Is it worth showing us the original problem statement?

  • 0
  Dr_Asik said:
The purpose of method overloading is not to duplicate code for each possible type; in fact, anytime your design implies duplicating code, it should make you raise an eyebrow. Here, both void rect(int, int) and void rect(double, double) use the exact same code.

If you need a version of the method unique to different argument types but that does the same thing for each type, this calls for a generic method. Something like

void <T> rect(T a, T b) {
	// use T instead of int or double
 }

I was just trying to learn the basics of method overloading. So I just duplicated the code so that I can get a double result if the input is of the type double and int result if the input type is int.

I appreciate your help. But I didn't understand the code; we have to replace T with a data type right?

  JamesCherrill said:
I guess this is some kind of school project that you have been set? So debating how useful it is won't help?

Anyway, I think you are right, there's no way to input a number without committing to its type.

Is it worth showing us the original problem statement?

The question [came up with it myself] : Compile a program in the Java using method overloading to find the area of a rectangle based the data type of the input (int or double, by the user) and print the result with the same data type.

  • 0
  Unto Darkness said:
I appreciate your help. But I didn't understand the code; we have to replace T with a data type right?
No, you really write T. Or AnyType. Or any unused type identifier. At compile-time, T will be (in theory) replaced by the type of the arguments you provide. I say in theory because how Java does it is superficial and stupid, but you don't need to know about that right now. You can consider T as being a placeholder for the real type. The compiler will generate as many versions of your method as the number of types you call it with.

In other words, instead of duplicating the code yourself, like you did in your sample code, you let the compiler do it by replacing the type by a placeholder.

  Quote
I was just trying to learn the basics of method overloading. So I just duplicated the code so that I can get a double result if the input is of the type double and int result if the input type is int.
I understand, but that's not really the purpose of method overloading, hence you have trouble finding a test case that makes sense. If you need a method that does exactly the same thing ( = uses the exact same code) for different types, write a generic one as I proposed. Method overloading is mainly useful if you need to do something slightly different depending on the parameters provided. For instance, System.out.print() is overloaded for many different types because although the overall result is the same (the object gets displayed on the terminal), it's done somewhat differently for each type. When you do System.out.print(1.345), Java recognizes through string analysis, at compilation, that 1.345 is a float and by overloading, selects System.out.print(float f).
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Trump announces a gold smartphone for $499 and new "T1 Mobile" 5G wireless service by Sagar Naresh Bhavsar The Trump Organization, spearheaded by President Trump's sons, Donald Trump Jr. and Eric Trump, has unveiled "T1 Mobile," a new mobile wireless service under the Trump Mobile brand. The service aims to offer affordable 5G services while competing with major telecom providers, with a patriotic twist. The announcement coincides with the 10th anniversary of Donald Trump's first presidential campaign launch. Trump Mobile is positioned as a wireless service that is meant to offer top-notch smartphone connectivity services for American people. One of the highlights of the wireless service plan is "The 47 Plan," priced at $47.45 per month, which gives a nod to Donald Trump being the 47th president of America. According to the official website, the plan includes: Unlimited talk time, messages, and internet Complete device protection 24/7 roadside assistance through Drive America Telehealth services, including virtual medical care, mental health support, and easy ordering and delivery for prescription medications Free International calling to more than 100 countries, including many with American military bases, to help honor the families who are bravely serving in our military abroad No contracts, no credit check Switching to Trump Mobile is simple. Customers would need to make a call to 888-TRUMP45, and they can continue using their current phone when making the transition. Trump Mobile has emphasized making customer support a top priority, promising 24/7 access to real representatives based in the U.S., no bots or automated systems. The company has claimed that T1 Mobile runs on the country's largest 5G networks, which will offer solid coverage across America. In addition to the mobile wireless service, Trump Mobile also announced its upcoming smartphone, the "T1 Phone," which will debut in September. It appears to feature a gold-colored metal case with an American flag etched on it, with triple cameras (iPhone knock-off). The company again highlighted that the device will be designed and built in America and is now available for pre-order.
    • OnePlus reveals five upcoming devices including the Nord 5 by David Uzondu OnePlus has confirmed that its next big product launch will take place on July 8 for its European and Indian markets. The company is dropping a whole slate of new hardware, announcing five different products. These include two new phones, the Nord 5 and its cheaper sibling, the Nord CE5, alongside a OnePlus Pad Lite, a smaller version of the OnePlus Watch 3, and a new pair of OnePlus Buds 4. The whole point of the Nord series, which originally launched back in 2020, has always been to filter some of the company's flagship tech down into phones that do not cost a fortune, and this year looks to be the most aggressive attempt at that yet. The star of this show is the OnePlus Nord 5. It is getting a huge performance upgrade, as it will be the first Nord phone to use a flagship-grade Qualcomm chip, the Snapdragon 8S Gen 3. That is a massive leap from the Snapdragon 7+ Gen 3 that powered the Nord 4 last year. OnePlus also seems serious about keeping it cool, adding an advanced 7,300mm² liquid cooling system and support for faster LPDDR5X RAM. The company even made a point to mention that the phone will handle games like Battlegrounds Mobile India at 90 to 144FPS. OnePlus is also making some interesting design changes. The company claimed that moving back to a vertical camera setup, a clear change from last year's Nord 4 and its horizontal bar, was a practical decision. The new layout supposedly optimizes internal space to fit the beefier chipset and other components. In another departure, the phone's frame will not be metal, unlike what we saw last year with the Nord 4. This change was based on feedback from a global survey where people apparently prioritized simple and practical designs over more premium materials. The Nord 5 will be available in a pale blue finish called "Dry Ice," while the cheaper Nord CE5 gets a "Marble Mist" color. Both new Nord phones will also replace the company's signature Alert Slider with a new customizable Plus Key. According to Celina Shi, CMO at OnePlus Europe, this is a "natural evolution" of the button, allowing it to be programmed for different actions like launching the camera or starting a recording. This key is tied to a new set of AI features called Plus Mind, which can recognize on-screen content and save it as a "memory." For example, it can pull schedule details from a picture of a flyer and add them directly to your calendar. The new Nord phones are joined by a handful of other devices. The OnePlus Watch 3 will now come in a smaller 43mm size for those with smaller wrists, and the company claims it has "exclusive monitoring features" not found on the larger model. The OnePlus Pad Lite is an "affordable," entry-level tablet designed to "work seamlessly" with the company's other hardware. Finally, the OnePlus Buds 4, available in "Zen Green" and "Storm Gray" color options, promise high-quality sound with dual drivers, Hi-Res audio support, and a low-latency mode for gaming. The launch event is set for July 8, where we will get the full specifications and, more importantly, the pricing for everything.
    • ok i have start11 installed on my desktop, how do i enable the start menu to look like win10. In otherwords, how can i right click on a file and next step would be to delete if i want to.   ty
    • High speed Internet is both a blessing and a curse...
  • Recent Achievements

    • Week One Done
      patrickft456 earned a badge
      Week One Done
    • One Month Later
      patrickft456 earned a badge
      One Month Later
    • One Month Later
      Jdoe25 earned a badge
      One Month Later
    • Explorer
      Legend20 went up a rank
      Explorer
    • One Month Later
      jezzzy earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      631
    2. 2
      ATLien_0
      282
    3. 3
      +FloatingFatMan
      175
    4. 4
      Michael Scrip
      155
    5. 5
      Steven P.
      128
  • Tell a friend

    Love Neowin? Tell a friend!