Go Back   CodingForums.com > :: Server side development > Java and JSP

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 11-01-2012, 04:11 AM   PM User | #1
ddeben1
New to the CF scene

 
Join Date: Nov 2012
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
ddeben1 is an unknown quantity at this point
Question Help with simple bar chart program

Hi, I was assigned a very vague program by my professor. Long story short, we were basically taught half of the material and expected to complete this program.

What we were asked to do was to design a bar chart with an average line, and on this bar chart we were supposed to have the data that was greater than the average have bars above the average line, and the data below the average with bars below the line. He also instructed us (in a series of emails, most of which contradicted the emails before them or what he taught in class) to create the following things:

an auxiliary class called BarWithAverage (detailed below)

private int[] readInputFile(String fileName)
private BarWIthAverage[] createBars(int[] data)
private void drawBars() //for height = 0, draw a line


The program I have so far is as follows.

Code:
package basicbarchartapp;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

    class BarWithAverage //this is the class he told us to make
    {
        final int height, //height >= 0
                   value; //for labeling
        int width, yForAverageLine;
        double average; //for labeling
        final Color color; //blue/red for data >/< average
        
        public BarWithAverage(int height, int value, Color color)
        {
            this.height = height;
            this.value = value;
            this.color = color;
            this.width = 0;
            
        }
        
        //here he asks a question, How to set values for width, yForAverageLine, and average?
        
    }

public class BarChartWithAverage extends JFrame {
    
    private Image fImageBuffer;
    private Insets fInsets;
    private Graphics g;
    private static final int WIDTH = 800, HEIGHT = 600;
    private static final Color BACKGROUND_COLOR = Color.white,
            BAR_COLOR_ABOVE = Color.blue, BAR_COLOR_BELOW = Color.red, 
            AVERAGE_COLOR = Color.green;
    
    public BarChartWithAverage()
    {
        addWindowListener(new BarChartWithAverage.WindowCloser());
        setVisible(true);
        fInsets = getInsets();
        setSize(WIDTH + fInsets.left + fInsets.right, HEIGHT + fInsets.top + 
                fInsets.bottom);
        setTitle("BAR GRAPH WITH AVERAGE LINE");
        setResizable(false);
        if(((fImageBuffer = createImage(WIDTH, HEIGHT)) != null) && 
                ((g = fImageBuffer.getGraphics()) != null))
            Run();
        else System.exit(1);
        
    }
    
    class WindowCloser extends WindowAdapter
    {
        public void windowClosing(WindowEvent e)
        {System.exit(0);}
    }
    
    private void Run()
    {
        DrawFixedObjects();
        DrawLine(0,100,WIDTH,100, AVERAGE_COLOR);
        DrawLine(0,50,WIDTH,50, AVERAGE_COLOR);
        DrawLine(0,500,WIDTH,500,AVERAGE_COLOR);
    }
    
    private void DrawFixedObjects()
    {
        g.clearRect(0, 0, WIDTH, HEIGHT);
        g.setColor(BACKGROUND_COLOR);
        g.fillRect(0, 0, WIDTH, HEIGHT);
        g.setColor(Color.black);
        repaint();
    }
    
    private void DrawLine(int x, int y, int X, int Y, Color color)
    {
        g.setColor(color);
        g.drawLine(x, y, X, Y);
        repaint();
    }
    
    public void paint(Graphics g)
    {
        if(fImageBuffer != null)
            g.drawImage(fImageBuffer, fInsets.left, fInsets.bottom, null);
    }
    
    private int[] readInputData(String fileName)
            throws FileNotFoundException
    {
        Scanner scan = new Scanner(new FileInputStream(fileName));
        int numData = scan.nextInt();
        int[] data = new int[numData];
        for(int i = 0; scan.hasNext(); i++)
        {
            data[i] = scan.nextInt();
        }
        return data;
    }
    
    private BarWithAverage[] createBars(int[] data) //both this and drawBars are empty because it is another place where I am stuck and have little clue on how to continue
    {

    }

    private static void drawBars()
    {
        
    }
      

    
    
    public static void main(String[] args) throws FileNotFoundException{
        
        new BarChartWithAverage();
    }

}

I'm stuck, and I'd really like a nudge in the right direction. This is only my second semester programming.

What I'm really confused on is how we're supposed to use the class BarsWithAverage to actually calculate an average using the array we made with createBars. They're part of two separate classes, and I'm following his exact instructions. How can I actually do something like that?

I'm not looking for someone to give me the answer, I really just want a nudge. I've spent the last 4 days stuck in the same spot and researching how to do this, and it hasn't been until today that I've finally broken down and asked online. When I confronted the professor about this, he asked me how I expected to learn if he taught us everything. The TA also hasn't been available, so my classmates and I have pretty much been alone on this. (sorry for the rant)

Last edited by ddeben1; 11-01-2012 at 04:15 AM..
ddeben1 is offline   Reply With Quote
Old 11-01-2012, 04:34 PM   PM User | #2
Fou-Lu
God Emperor


 
Fou-Lu's Avatar
 
Join Date: Sep 2002
Location: Saskatoon, Saskatchewan
Posts: 15,741
Thanks: 4
Thanked 2,465 Times in 2,434 Posts
Fou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to all
Are these class and constructor signatures provided in this way? If so, I don't see any purpose to adding these private methods to BarWithAverage either. Since they can't be called outside of the class, nor is the BarWithAverage provided with any information regarding the averages of other items or a file in which it can read, it has no practical use within the BarWithAverage itself. That really makes more sense to use on the BarChartWithAverage given what you have here for the two classes and their construction. Now if you have other setters such as taking the average or giving it the data array, then sure that would be alright in the BarWithAverage.
What I'm trying to figure out looking at this is if the BarWithAverage is to paint itself, or simply return data. Since drawBars isn't provided, we cannot tell if it intends to paint itself or simply describe itself to the BarChartWithAverge.

So the only way I can see the BarWithAverage actually making use of these private methods is if you provide it with a graphics to paint on, the entire dataset available (or a file or whatever to get them from), and then you can paint with the class. To me, these still seem like they should be on the BarChartWithAverage class (non-static of course; the drawBars you have is static). This way it can iterate an array of BarWithAverage objects and paint accordingly.

I think you'll need to get more clarification on what these classes are responsible for doing.
Fou-Lu is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 08:28 AM.


Advertisement
Log in to turn off these ads.