Kuj4k
12-08-2011, 01:25 AM
This program is to have to user enter numbers in the top text field and then be able to sort them and/or show the min number.
Ive been working on this code for multiple hours now today, I have it almost done but I cant not get my buildArray class to work properly. Its mostly the scanner method Im having troubles with. I just want to be able to use "," and not have them show up as -1.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MainWindow extends JFrame implements ActionListener {
JScrollPane pane1;
JScrollPane pane2;
JTextArea area1;
JTextArea area2;
JLabel area1Title;
JLabel area2Title;
JButton sort;
JButton findMins;
JButton clearArea1;
JButton clearArea2;
public MainWindow() {
super("Array Fun");
setBounds(100, 200, 800, 800);
getContentPane().setLayout(null);
setVisible(true);
area1 = new JTextArea();
pane1 = new JScrollPane(area1);
pane1.setBounds(10, 10, 400, 300);
add(pane1);
area1Title = new JLabel("Enter text in the above space", JLabel.CENTER);
area1Title.setBounds(10, 320, 400, 40);
add(area1Title);
area2 = new JTextArea();
area2.setEditable(false);
pane2 = new JScrollPane(area2);
pane2.setBounds(10, 400, 400, 300);
add(pane2);
area2Title = new JLabel("Output text area", JLabel.CENTER);
area2Title.setBounds(10, 710, 400, 40);
add(area2Title);
findMins = new JButton("Find Minimums");
findMins.setBounds(450, 250, 250, 40);
findMins.addActionListener(this);
add(findMins);
sort = new JButton("Sort Descending");
sort.setBounds(450, 320, 250, 40);
sort.addActionListener(this);
add(sort);
clearArea1 = new JButton("Clear Input Text Area");
clearArea1.setBounds(450, 380, 250, 40);
clearArea1.addActionListener(this);
add(clearArea1);
clearArea2 = new JButton("Clear Output Text Area");
clearArea2.setBounds(450, 430, 250, 40);
clearArea2.addActionListener(this);
add(clearArea2);
repaint();
}
private int[] buildArray(String line) {
int[]arr = new int[line.length()];
Scanner scan = new Scanner (line);
scan.useDelimiter (",");
for (int i = 0; i < line.length(); i++){
arr[i] = Character.digit(line.charAt(i),10);
}
return arr;
}
private int findMin(int numbers[]) {
//PRE numbers.length >= 1
int min = numbers [0];
for (int i = 1; i < numbers.length; i++){
if (numbers [i] < min) {
min = numbers [i];
}
}
return min;
}
private String makeString(int numbers[]) {
//PRE numbers.length >= 1
int i = 0;
String s1 = new String ("");
while (i < numbers.length){
s1 = numbers[i] + s1 ;
i++;
}
return s1;
}
private void sort(int numbers[]) {
for (int i = 1; i< numbers.length; i++){
int j = i-1;
int temp = numbers[i];
while (j >= 0 && temp > (numbers[j])){
numbers[j+1] = numbers[j];
j--;
}
numbers[j+1] = temp;
}
}
private void sortLines() {
int result;
int lineNumber = 1;
int numbers[];
String contents = area1.getText();
Scanner nextLine = new Scanner(contents);
nextLine.useDelimiter("\n");
String line;
String outputLine;
while (nextLine.hasNext()) {
line = nextLine.next();
numbers = buildArray(line);
sort(numbers);
outputLine = "Line "+lineNumber+" Sorted:\t"+makeString(numbers)+'\n';
area2.append(outputLine);
lineNumber++;
}
}
private void findMins() {
int lineNumber = 1;
int numbers[];
String contents = area1.getText();
Scanner nextLine = new Scanner(contents);
nextLine.useDelimiter("\n");
String line;
String outputLine;
while (nextLine.hasNext()) {
line = nextLine.next();
numbers = buildArray(line);
outputLine = "The minimum value in line "+lineNumber+" is "+ findMin(numbers)+'\n';
area2.append(outputLine);
lineNumber++;
}
}
public void actionPerformed(ActionEvent e) {
if ((JButton) e.getSource() == clearArea1)
area1.setText("");
else if ((JButton) e.getSource() == clearArea2)
area2.setText("");
else if ((JButton) e.getSource() == findMins)
findMins();
else
sortLines();
}
}
Any help is appreciated if I can just get the commas to work I can be done.
Ive been working on this code for multiple hours now today, I have it almost done but I cant not get my buildArray class to work properly. Its mostly the scanner method Im having troubles with. I just want to be able to use "," and not have them show up as -1.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class MainWindow extends JFrame implements ActionListener {
JScrollPane pane1;
JScrollPane pane2;
JTextArea area1;
JTextArea area2;
JLabel area1Title;
JLabel area2Title;
JButton sort;
JButton findMins;
JButton clearArea1;
JButton clearArea2;
public MainWindow() {
super("Array Fun");
setBounds(100, 200, 800, 800);
getContentPane().setLayout(null);
setVisible(true);
area1 = new JTextArea();
pane1 = new JScrollPane(area1);
pane1.setBounds(10, 10, 400, 300);
add(pane1);
area1Title = new JLabel("Enter text in the above space", JLabel.CENTER);
area1Title.setBounds(10, 320, 400, 40);
add(area1Title);
area2 = new JTextArea();
area2.setEditable(false);
pane2 = new JScrollPane(area2);
pane2.setBounds(10, 400, 400, 300);
add(pane2);
area2Title = new JLabel("Output text area", JLabel.CENTER);
area2Title.setBounds(10, 710, 400, 40);
add(area2Title);
findMins = new JButton("Find Minimums");
findMins.setBounds(450, 250, 250, 40);
findMins.addActionListener(this);
add(findMins);
sort = new JButton("Sort Descending");
sort.setBounds(450, 320, 250, 40);
sort.addActionListener(this);
add(sort);
clearArea1 = new JButton("Clear Input Text Area");
clearArea1.setBounds(450, 380, 250, 40);
clearArea1.addActionListener(this);
add(clearArea1);
clearArea2 = new JButton("Clear Output Text Area");
clearArea2.setBounds(450, 430, 250, 40);
clearArea2.addActionListener(this);
add(clearArea2);
repaint();
}
private int[] buildArray(String line) {
int[]arr = new int[line.length()];
Scanner scan = new Scanner (line);
scan.useDelimiter (",");
for (int i = 0; i < line.length(); i++){
arr[i] = Character.digit(line.charAt(i),10);
}
return arr;
}
private int findMin(int numbers[]) {
//PRE numbers.length >= 1
int min = numbers [0];
for (int i = 1; i < numbers.length; i++){
if (numbers [i] < min) {
min = numbers [i];
}
}
return min;
}
private String makeString(int numbers[]) {
//PRE numbers.length >= 1
int i = 0;
String s1 = new String ("");
while (i < numbers.length){
s1 = numbers[i] + s1 ;
i++;
}
return s1;
}
private void sort(int numbers[]) {
for (int i = 1; i< numbers.length; i++){
int j = i-1;
int temp = numbers[i];
while (j >= 0 && temp > (numbers[j])){
numbers[j+1] = numbers[j];
j--;
}
numbers[j+1] = temp;
}
}
private void sortLines() {
int result;
int lineNumber = 1;
int numbers[];
String contents = area1.getText();
Scanner nextLine = new Scanner(contents);
nextLine.useDelimiter("\n");
String line;
String outputLine;
while (nextLine.hasNext()) {
line = nextLine.next();
numbers = buildArray(line);
sort(numbers);
outputLine = "Line "+lineNumber+" Sorted:\t"+makeString(numbers)+'\n';
area2.append(outputLine);
lineNumber++;
}
}
private void findMins() {
int lineNumber = 1;
int numbers[];
String contents = area1.getText();
Scanner nextLine = new Scanner(contents);
nextLine.useDelimiter("\n");
String line;
String outputLine;
while (nextLine.hasNext()) {
line = nextLine.next();
numbers = buildArray(line);
outputLine = "The minimum value in line "+lineNumber+" is "+ findMin(numbers)+'\n';
area2.append(outputLine);
lineNumber++;
}
}
public void actionPerformed(ActionEvent e) {
if ((JButton) e.getSource() == clearArea1)
area1.setText("");
else if ((JButton) e.getSource() == clearArea2)
area2.setText("");
else if ((JButton) e.getSource() == findMins)
findMins();
else
sortLines();
}
}
Any help is appreciated if I can just get the commas to work I can be done.