Hej,
Postanowilem zrobic zadanie ze SPOJA https://pl.spoj.com/problems/BFN1/ wczytujac dane za pomoca stworzonego przeze mnie okna z przyciskami i polem tekstowym, a sam wynik póki co chcę odczytac w konsoli. Niestety po wpisaniu liczby i wciśnieciu guzika "Add new number" wyskakuje wyjątek. Wydaje mi sie, ze pojawia sie on z powodu próby zmiany typu pobranej liczby z Stringa na Integer. Nie bardzo rozumiem dlaczego tak sie dzieje i jak z tego wybrnąć.
Kod:
public class Main {
public static void main(String[] args) {
new MyFrame();
}
}
klasa:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
public class MyFrame extends JFrame implements ActionListener {
private JLabel label;
private JTextField textField;
private JButton addNumber;
private JButton checkPolidroms;
private int numberOfOperations;
private Integer number;
private List<Integer> numbers = new ArrayList<>();
private int amountOfInputs;
MyFrame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setSize(400, 400);
this.setLocationRelativeTo(null);
this.setResizable(false);
label = new JLabel();
label.setText("Enter a number");
label.setBounds(50, 20, 300, 50);
label.setFont(new Font("MV Boli", Font.PLAIN, 35));
label.setForeground(Color.green);
textField = new JTextField();
textField.setBounds(150, 100, 100, 50);
textField.setFont(new Font("Arial", Font.PLAIN, 35));
addNumber = new JButton("Add new number");
addNumber.setBounds(125, 200, 150, 50);
addNumber.setFocusable(false);
addNumber.addActionListener(this);
checkPolidroms = new JButton("Check Polidroms");
checkPolidroms.setBounds(125, 275, 150, 50);
checkPolidroms.setFocusable(false);
checkPolidroms.addActionListener(this);
this.add(label);
this.add(textField);
this.add(addNumber);
this.add(checkPolidroms);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == addNumber) {
String numberToString = addNumber.getText();
textField.setText("");
number = Integer.parseInt(String.valueOf(numberToString));
numbers.add(number);
amountOfInputs++;
}
if (e.getSource() == checkPolidroms) {
for(int i=0;i<amountOfInputs;i++){
getPolidrom(numbers.get(i));
}
numbers.clear();
amountOfInputs=0;
}
}
public static int reverseNumber(int number) {
char[] numberToCharArray = String.valueOf(number).toCharArray();
int i = 0;
int j = numberToCharArray.length - 1;
while (i < j) {
char tempElement = numberToCharArray[i];
numberToCharArray[i] = numberToCharArray[j];
numberToCharArray[j] = tempElement;
i++;
j--;
}
int reversedNumber = Integer.parseInt(String.valueOf(numberToCharArray));
return reversedNumber;
}
public void getPolidrom(Integer number) {
int number1 = number;
int number2 = reverseNumber(number);
while (true) {
if (number1 != number2) {
number = number1 + number2;
number1 = number;
number2 = reverseNumber(number);
numberOfOperations++;
} else {
System.out.println(number + " " + numberOfOperations);
numberOfOperations = 0;
break;
}
}
}
}
Dopiera sie uczę, wiec jesli macie jakies uwagi lub wskazówki do kody to też chętnie się dowiem.