Wątek przeniesiony 2015-04-12 08:15 z Java przez bogdans.

SPOJ - błąd wykonania (NZEC)

0

Witam,

po raz kolejny muszę poprosić Was o pomoc, bo sama nie wpadnę na pewno o co chodzi, z Javą mam styczność od niedawna.
Link do zadania: http://pl.spoj.com/problems/JPESEL/

Za każdym razem, gdy poniższy kod wrzucam do SPOJa, wyrzuca mi błąd wykonania (NZEC). Już niejednokrotnie radziłam sobie z tego typu błędem, ale w tym przypadku nie wiem o co chodzi, bowiem u mnie w NetBeansie program działa jak należy: nie wyrzuca żadnego błędu, zwraca poprawne wyniki i kończy się prawidłowo. Czy ktoś ma jakiś pomysł o co tutaj chodzi?

import java.util.Scanner;

public class Main {
    
  public static void main(String[] args) {
    Scanner odczyt = new Scanner(System.in);
    Scanner odczyt2 = new Scanner(System.in);
    
    int suma = 0;
    int t = odczyt.nextInt();
    char[] peseltablica = new char[11];
    int[] peseltablica2 = new int[11];

    for(int i=0; i<t; i++){
       String pesel = odczyt2.nextLine();

       peseltablica = pesel.toCharArray();   //wstawienie poszczegolnych cyfr do tablicy znakow
       
       for(int j=0; j<11; j++){
          peseltablica2[j] = Character.getNumericValue(peseltablica[j]); //zamiana znakow na inty i 
                                                                         //wstawienie do tablicy int
       }
       
       suma = peseltablica2[0]*1+peseltablica2[1]*3;   //podzielilam sume na kawalki by nie bylo
       suma = suma+peseltablica2[2]*7+peseltablica2[3]*9;          //monstrualnie dlugiej linii:)
       suma = suma+peseltablica2[4]*1+peseltablica2[5]*3;
       suma = suma+peseltablica2[6]*7+peseltablica2[7]*9;
       suma = suma+peseltablica2[8]*1+peseltablica2[9]*3+peseltablica2[10]*1;
       
       if (suma <= 0){
           System.out.println("N");
           continue;
       }
       
       if (suma%10 == 0)
       {    
       System.out.println("D");
       }
       else System.out.println("N");  
    }
}  
}

Pozdrawiam :)

1

Błądzisz z I/O bo nie umiesz używać scannera. Już sam fakt że zrobiłaś 2 jest błędem, a dodatkowo nie doczytałaś co dokładnie robi nextInt i nextLine. Zobacz na przykład co się stanie jak dla wejścia

1
alamakota

zrobisz nextInt a potem nextLine i nextLine. Zobacz co każde z tych wywołań ci zwróci.

0

No wyrzuci mi błąd, zapewne dlatego, że w programie konwertuję poszczególne znaki na inty i będzie klapa jak mi na litery natrafi. Ale skoro SPOJ ma jako input wrzucać 11-cyfrowe liczby to nie rozumiem dlaczego nie mogę skorzystać z takiego rozwiązania jakie zastosowałam. :P

1

Nie, ty nic nie rozumiesz. Ja nie mówie o twoim programie. Ja mówie o zupełnie nowym, 3 linijkowym programie który pozwoli ci zrozumieć jak dzialają narzędzia których próbujesz użyć. Bo nie rozumiesz jak działa scanner i póki nie zrozumiesz, nie będziesz w stanie go poprawnie używać.

Patrz: http://ideone.com/CxFzEJ

BTW: twój program spokojnie poradziłby sobie z literkami, ale ty niestety wiesz chyba jeszcze mniej niż zakładałem skoro nie wiesz że znaki to też liczby...

0

No sprawdziłam. Czyli sugerujesz, że nextInt() i nextLine() nie mogą iść w parze bo do zmiennej i tak przydzieli się pusta wartość po wciśnięciu entera nawet jak nic dalej nie wpiszemy?
Tylko dziwne, że nawet przy niewłaściwym użyciu tych funkcji i tak program mi zwraca w konsoli to co trzeba.
Dobra spróbuję to poprawić.

1

Mogą iść w parze ale tylko jeśli rozumiesz ze nextInt nie wyciągnie ci znaku nowej linii z bufora...

0

Zmodyfikowałam trochę początek kodu:

public static void main(String[] args) {
    Scanner odczyt = new Scanner(System.in);
 
    int suma = 0;
    String t = odczyt.nextLine();
    char[] peseltablica = new char[11];
    int[] peseltablica2 = new int[11];
    int x = Character.getNumericValue(t.charAt(0));
    
    for(int i=0; i<x; i++){
       String pesel = odczyt.nextLine();
 
       peseltablica = pesel.toCharArray();
       (...)

Błędu NZEC już nie wyrzuca, ale wywala "błędna odpowiedź" (jeszcze lepiej xd). :P
A ja dalej w konsoli otrzymuję prawidłowe wyniki, więc nie wiem nawet gdzie szukać błędu :(

1

To int x = Character.getNumericValue(t.charAt(0)); na pewno jest źle. A co jak liczba będzie dwucyfrowa? o_O
Integer.parseInt()...

1 użytkowników online, w tym zalogowanych: 0, gości: 1