• 0

[Java] Subtraction error when using double = double - int


Question

I'm having an error in the line of code below:

double difmeanmedian = mean - median;

Where double mean and int median are defined previously in the program without any troubles.

I'm getting weird results when running my program in the compiler. In the examples (ie, NOT CODE :) ) below of my results, variable(number) will mean that I used said variable that had a value of said number.

double difmeanmedian = mean(7.0) - median(8); //returns difmeanmedian = 5.0 (incorrect)
double difmeanmedian = mean(13.0) - 1; //returns difmeanmedian = 12.0 (correct)
double difmeanmedian = 13.0 - 1; //returns difmeanmedian = 12.0 (correct)
double difmeanmedian = 25.0 - median(14); //returns difmeanmedian = 23.0 (incorrect)

Any idea what might be causing this? Any help would be greatly appreciated! :D

Full code in case you want more:

(*Note: is there a way to hide this long snippet? Perhaps a "spoiler" button?)

import java.util.Random;
import java.util.Scanner;

public class Vesuvius {
    public static void main(String [] args){
        Scanner input = new Scanner(System.in);

    //User defines parameters
        System.out.println("Definet of integers from x to y inclusive from which random integers shall be generated, and define how many integers shall be generated.");
        System.out.println("Define);
        int x = input.nextInt();
        System.out.println("Define);
        int y = input.nextInt();
        System.out.println("How integers should be generated?");
        int intsgenerated = input.nextInt();

  //Generates an array "set" of random numbers based on the user's specifications.
        int temp1;
        int[] set = new int[intsgenerated];
        Random generator = new Random();
        for(int i=0; i<intsgenerated; i++){
            temp1 = generator.nextInt(y-x)+x;
            set[i] = temp1;
        }

   //Selection sort to sort the random numbers of array set in ascending order
        for(int i=0; i<set.length-1; i++){      
            for(int j=i+1; j<set.length; j++){
                if(set[i] > set[j]){
                    int temp = set[i];
                    set[i] = set[j];
                    set[j] = temp;
                }
            }
        }

    //Calculates the mean of the set
        double mean;
        int temp2 = 0;
        for(int i=0; i<set.length; i++){
            temp2 = temp2 + set[i];
        }
        mean = temp2/set.length;
        System.out.println("The is " + mean);

    //Finds maximum value of the set
        int max = 0;
        for(int i=0; i<set.length; i++){                  //Finds and prints maximum value.
          if(set[i] > max){
            max = set[i];
          }
        }

    //Calculates the median of the set
        int median;
        median = set.length/2;
        System.out.println("Thean is " + set[median]);

    //Calculates the mode with the highest value. ie, if both 5 and 9 are modes of the set, only 9 will be returned.
        int mode = 0;
        int[] tally = new int[max+1];
        int q = 0;
        for(int i=0; i<tally.length; i++){               
          tally[i] = 0;                         
        }for(int i=0; i<set.length; i++){
          q = set[i];
          tally[q]++;
        }for(int i=0; i<tally.length; i++){
          if(tally[i] >= tally[mode]){
            mode = i;
          }}
        if(tally[mode] == 1){
            System.out.println("Thereo mode in this set.");
        }else{
        System.out.println("The of the set is " + mode + ".");
        }

double difmeanmedian = mean - median;  //this line doesn't behave well
int difmedianmode = median - mode;
double difmeanmode = mean - mode;  //nor does this line

System.out.println("difmeanmedian difmeanmedian);
System.out.println("difmedianmode difmedianmode);
System.out.println("difmeanmode difmeanmode);

//----------------------------------------------------------------------------//
//Prints list of numbers
       System.out.println("The of numbers generated is: ");
        for(int i=0; i<intsgenerated; i++){
            System.out.print(set[i] + ", ");
       }

    }
}

5 answers to this question

Recommended Posts

  • 0

//Calculates the median of the set
        int median;
        median = set.length/2;
        System.out.println("Thean is " + set[median]);

It looks like you are using the index of the median, rather than the value of the median. In the example you posted the median is two, in both cases which is why the value returned was not what you expected, which I am assuming is the index. I think you want:

median = set[set.length/2];

  • 0
  On 21/03/2010 at 13:57, Minchino said:

//Calculates the median of the set
        int median;
        median = set.length/2;
        System.out.println("Thean is " + set[median]);

It looks like you are using the index of the median, rather than the value of the median. In the example you posted the median is two, in both cases which is why the value returned was not what you expected, which I am assuming is the index. I think you want:

median = set[set.length/2];

Yes, thank you, that would definitely be my problem! :D

What package do I need to import to use the set.get() method? Does it expect an int as a parameter?

  • 0

Thanks, that fixed that problem!

I've got another problem though... the double mean is always coming out as an integer (not to be confused with an int). For example, when I have set with values {1, 1, 1, 3, 3, 4}, the mean SHOULD be 13/6 = 2.166667, but it returns 2.0. Is this because the decimal is repeating, or have I done something wrong? If it is because of the repeating problem, how can I fix it?

  • 0

int temp2 = 0;
for(int i=0; i<set.length; i++){
     temp2 = temp2 + set[i];
}
mean = temp2/set.length;

Because temp2 and set.length are integers, integer division is performed (any remainder is lost). To avoid this cast one of the arguments to a double:

mean = ((double) temp2)/set.length;

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • I'd prefer the disclaimer being more transparent by putting it above the article.
    • dBpoweramp Music Converter 2025-06-05 by Razvan Serea Audio conversion perfected, effortlessly convert between formats. dBpoweramp contains a multitude of audio tools in one: CD Ripper, Music Converter, Batch Converter, ID Tag Editor and Windows audio shell enhancements. Preloaded with essential codecs (mp3, wave, FLAC, m4a, Apple Lossless, AIFF), additional codecs can be installed from [Codec Central], as well as Utility Codecs which perform actions on audio files. After 21 days the trial will end, reverting to dBpoweramp Free edition (learn the difference between Reference and dBpoweramp Free, here). dBpoweramp is compatible with Windows 10, 8, 7, Vista, both 32 and 64 bit. dBpoweramp Music Converter features: Convert audio files with elegant simplicity. mp3, mp4, m4a (iTunes / iPod), Windows Media Audio (WMA), Ogg Vorbis, AAC, Monkeys Audio, FLAC, Apple Lossless (ALAC) to name a few! Multi CPU Encoding Support Rip digitally record audio CDs (with CD Ripper) Batch Convert large numbers of files with 1 click Windows Integration popup info tips, audio properties, columns, edit ID-Tags DSP Effects such as Volume Normalize, or Graphic EQ [Power Pack Option] Command Line Encoding: invoke the encoder from the command line DSP Effects - process the audio with Volume Normalize, or Sample / Bit Rate Conversion, with over 30 effects dBpoweramp is a fully featured mp3 Converter dBpoweramp integrates into Windows Explorer, an mp3 converter that is as simple as right clicking on the source file >> Convert To. Popup info tips, Edit ID-Tags are all provided. dBpoweramp Music Converter 2025.06.05 changelog: Darkmode added Core Converter Debug log dumps ID Tags written VST Effect Folders dialog fixed missing InitCommonControls would not show correctly FLAC/Ogg/Opus/etc - allows editing of CDTOC ID Tag CD Ripper secure ripping log where shows TOC was not showing CD Extra correctly CD Ripper was incorrectly setting data track length on main display (for certain drives) CD Ripper internally better handling of corrupt TOCs CD TOC to Tag was incorrectly adding 150 to CD Extra disc CD Ripper shows "AccurateRip Unconfigured" in rip status rather than "not in accuraterip" if unconfigured CD Ripper art paste accepts https CueSheet added as standard - log file written to same folder as cue and folder.jpg AIFF internal code merge (macos >> windows) Download: dBpoweramp Music Converter R2025.06.05 | 82.2 MB (Shareware) View: dBpowerAMP Music Converter Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Staged. It's a requirement that vehicles are strapped down to the bed. Usually wheel and/or chassis tie downs are used. That appears to just be on the winch.
    • I feel Apple's big problem is the lack of big data to train any AI LLM model. They have statistics on usage, but they don't have the written social media, messaging (they were early adopters of end-to-end encryption), they didn't scrape the Internet before the book companies and new sources were wise. So they have no choice but to use a third party LLM provider. Which ties them in knots with their own stance on security and privacy. In short, they are royally stuffed when it comes to developing an in-house AI.
  • Recent Achievements

    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
    • One Year In
      Mido gaber earned a badge
      One Year In
    • One Year In
      Vladimir Migunov earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      495
    2. 2
      snowy owl
      255
    3. 3
      +FloatingFatMan
      252
    4. 4
      ATLien_0
      227
    5. 5
      +Edouard
      191
  • Tell a friend

    Love Neowin? Tell a friend!