Question
// Chapter 8 Programming Activity 2 // ArrayPractice2.java // Anderson, Franceschi import java.awt.*; import javax.swing.*; import javax.swing.JOptionPane; import java.awt.event.*; import java.util.Random; public class ArrayPractice2 extends
// Chapter 8 Programming Activity 2 // ArrayPractice2.java // Anderson, Franceschi
import java.awt.*; import javax.swing.*; import javax.swing.JOptionPane; import java.awt.event.*; import java.util.Random;
public class ArrayPractice2 extends JFrame { private final int SIZE = 15;
private static ArrayPractice2 app; private static int [] arr; private static int current1 = -1; private static int current2 = -1;
private int key; private BarChart bc;
private JButton sequentialSearch; private JButton bubbleSort; private ButtonHandler bh;
private Image offscreen;
public ArrayPractice2() { super("Choose your activity"); Container c = getContentPane(); c.setLayout(new FlowLayout());
sequentialSearch = new JButton("Sequential Search"); c.add(sequentialSearch); bubbleSort = new JButton("Bubble Sort"); c.add(bubbleSort);
bh = new ButtonHandler(); sequentialSearch.addActionListener(bh); bubbleSort.addActionListener(bh);
arr = new int[SIZE];
// fill with random numbers between 20 and 160 Random rand = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = rand.nextInt(141) + 20; }
bc = new BarChart(arr);
setSize(400,275); setVisible(true); offscreen = this.createImage(getSize().width, getSize().height); }
// 1 ***** student writes this method /** Searches for key in integer array named arr // arr is an instance variable of the class and has been // instantiated and filled with random values. // @param key value to search for // @return if key is found, the index of the first element // in array whose value is key; if key is not found, // the method returns -1 */ public int sequentialSearch(int key) { // Note: To animate the algorithm, put this method call as the // first statement in your for loop // animate(i, 0); // where i is the index of the current array element // Part 1 student code starts here:
return 0; // Replace this line with your return statement
// Part 1 student code ends here. } // end of sequentialSearch
// 2. ***** student writes this method /** Sorts arr in ascending order using the bubble sort algorithm */ public void bubbleSort() { // Note: To animate the algorithm, put this method call as the // last statement in your innermost for loop // animate(i, j); // where i is the value of the outer loop counter // and j is the value of the inner loop counter, // or the index of the current array element // Part 2 student code starts here:
// Part 2 student code ends here. } // end of bubbleSort
public void startActivity(int act) { bc.setActivity(act); boolean goodInput = false; switch(act) { case 0: goodInput = false; while (!goodInput || key < 20 || key > 160) { try { String answer = JOptionPane.showInputDialog(null, "Enter an integer value between 20 and 160 to search sequentially"); if (answer != null) { key = Integer.parseInt(answer); goodInput = true; } else { goodInput = false; break; } } catch(Exception e) {} } if (goodInput) { int index = sequentialSearch(key); if (index != -1) JOptionPane.showMessageDialog(null, "You found " + key + " at index " + index); else JOptionPane.showMessageDialog(null, "You did not find " + key); } break;
case 1: bubbleSort(); JOptionPane.showMessageDialog(null, "The sorting of the array is done"); break; } enableButtons(); }
private void animate(int index1, int index2) { try { current1 = index1; current2 = index2; bc.setArray(arr);
Graphics g = offscreen.getGraphics(); paint(g); g = this.getGraphics(); g.drawImage(offscreen, 0, 0, this);
Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("IE Exception " + e.getMessage()); System.out.println(e.toString()); } }
public void disableButtons() { bubbleSort.setEnabled (false); sequentialSearch.setEnabled(false); }
public void enableButtons() { bubbleSort.setEnabled (true); sequentialSearch.setEnabled(true); }
public static int getCurrent1() { return current1; }
public static int getCurrent2() { return current2; }
public static int [] getArray() { return arr; }
public void paint(Graphics g) { super.paint(g); bc.draw(g); bc.updateBarChart(key, current1, g); }
public static void main(String [] args) { app = new ArrayPractice2(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
private class ButtonHandler implements ActionListener { private boolean on = true; public void actionPerformed(ActionEvent e) { PrintArrayT t = new PrintArrayT(app); if (e.getSource() == sequentialSearch) { disableButtons(); sequentialSearch.requestFocus(); bc.setActivity(0); t.start(); } if (e.getSource() == bubbleSort) { disableButtons(); bubbleSort.requestFocus(); bc.setActivity(1); t.start(); } } }
private class PrintArrayT extends Thread { int [] arr; ArrayPractice2 s1; public PrintArrayT(ArrayPractice2 s) { arr = ArrayPractice2.arr; s1 = s; } public void run() { startActivity(bc.getActivity()); } }
}
/* Draws a Bar Chart * Anderson, Franceschi */ import java.awt.Graphics; import javax.swing.JFrame; import java.awt.Color;
public class BarChart { public static int XMAX = 400; public static int YMAX = 250;
private int [] data; private int barSize; private int xStart; private int activity = 0;
public BarChart( ) {}
public BarChart( int [] dArray ) { data = new int [dArray.length]; for ( int i = 0; i < dArray.length; i++ ) { data[i] = dArray[i]; } barSize = ( XMAX - 20 ) / data.length; }
public void setArray( int [] dArray ) { for ( int i = 0; i < dArray.length; i++ ) { data[i] = dArray[i]; } }
public void setActivity( int a ) { activity = a; }
public int getActivity( ) { return activity; }
public void updateBarChart( int key, int index, Graphics g ) { switch( activity ) { case 0: // sequential search draw( g ); drawSequentialSearch( key, g ); break; case 1: // bubble sort draw( g ); drawBubbleSort( g ); break; } }
public void draw( Graphics g ) { xStart = 10; g.setColor( Color.BLUE ); for ( int i = 0; i < data.length; i++ ) { g.fillRect( xStart, YMAX - 25 - data[i], barSize-5, data[i] ); g.drawString( String.valueOf( data[i]), xStart, YMAX - 5 ); xStart += barSize; } }
public void drawBubbleSort ( Graphics g ) { xStart = 10; int a = ArrayPractice2.getCurrent1( ); int b = ArrayPractice2.getCurrent2( ); if ( a != -1 && b != -1 ) { g.setColor( Color.RED ); xStart = 10 + b * barSize; g.drawRect( xStart, YMAX - 25 - data[b], barSize-5, data[b] ); g.drawString( String.valueOf( data[b] ), xStart, YMAX - 5 ); xStart = 10 + ( b + 1 ) * barSize; g.drawRect( xStart, YMAX - 25 - data[b + 1], barSize-5, data[b + 1] ); g.drawString( String.valueOf( data[b + 1] ), xStart, YMAX - 5 ); } }
public void drawSequentialSearch( int key, Graphics g ) { int a = ArrayPractice2.getCurrent1( ); if ( a != -1 ) { g.setColor( Color.RED ); xStart = 10 + a * barSize; g.drawRect( xStart, YMAX - 25 - key, barSize-5, key ); g.drawString( String.valueOf( data[a] ), xStart, YMAX - 5 ); } } }
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started