Mam problem z zadaniem z tytułu. Link: https://pl.spoj.com/problems/STOS/
Z tego co przeczytałem w głównej pętli nie powinno być true, jednak nie wiem jaki inny warunek mógłbym tam umieścić.
(próbowałem input.hasNext()-ale nie wykrywał pustej lini oraz isEmpty()-ale nie można odwołać się do Scannera kiedy jest true działa normalnie ale sędzia zwraca NZEC…).
KOD:
import java.util.*;
public class Zadanie3 {
//https://pl.spoj.com/problems/STOS/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String znak;
char helper;
int stack[]=new int[10];
int l;
int i =-1;
List<String> outcome = new ArrayList<>();
while (true){
znak=input.nextLine();
if(znak.isEmpty()){
input.close();
break;
}
if(znak.charAt(0)=='+' && i<9){
znak=input.nextLine();
if(znak.isEmpty()){
input.close();
break;
}
l=znak.length();
char[] checker=znak.toCharArray();
for(int a=0;a<l;a++) {
if((int)checker[a]<48 || (int)checker[a]>57) {
System.exit(0);
}
}
i++;
stack[i]=Integer.parseInt(znak);
outcome.add(":)");
}else if(znak.charAt(0)=='-' && i>=0 && i<=9){
outcome.add(String.valueOf(stack[i]));
i--;
}
else{
outcome.add(":(");
}
znak=input.nextLine();
if(znak.isEmpty()){
input.close();
break;
}
if(znak.charAt(0)=='+' && i<9){
znak=input.nextLine();
if(znak.isEmpty()){
input.close();
break;
}
l=znak.length();
char[] checker=znak.toCharArray();
for(int a=0;a<l;a++) {
if((int)checker[a]<48 || (int)checker[a]>57) {
System.exit(0);
}
}
i++;
stack[i]=Integer.parseInt(znak);
outcome.add(":)");
}else if(znak.charAt(0)=='-' && i>=0 && i<=9){
outcome.add(String.valueOf(stack[i]));
i--;
}
else{
outcome.add(":(");
}
}
for(String s: outcome) {
System.out.println(s);
}
}
}
Link do kodu: