Co jest nie tak w tym zadaniu? SPOJ

0

O to treść zadania

Jeszcze kilkanaście lat temu wykręcanie numeru telefonicznego było czynnością, która niejedną sekretarkę mogła przyprawić o ból palców. Niewygodne tarcze na aparatach i impulsowy wybór numerów powodowały, że nawiązanie połączenia trwało przesadnie długo, zwłaszcza gdy linia była zajęta i przy każdej próbie trzeba było wykręcać ten sam numer.

Dziś sytuacja jest o niebo lepsza. Wybór numeru odbywa się tonowo, a do dyspozycji mamy wygodne klawiatury. Jedną z ich charakterystycznych cech jest przyporządkowanie każdej cyfrze trzech lub czterech liter, tak jak w tabeli poniżej.
 Cyfra  	 Litery 
2 	ABC
3 	DEF
4 	GHI
5 	JKL
6 	MNO
7 	PQRS
8 	TUV
9 	WXYZ

Dzięki takiemu przyporządkowaniu pewne numery łatwiej jest zapamiętać jako tekst. Dla przykładu numer 252625682 może być reprezentowany przez tekst ALAMAKOTA. Takie udogodnienie ma jednak pewną wadę. Wszelkiego rodzaju formularze i inne dokumenty wymagają podania numeru w postaci cyfrowej, a to wymagałoby doskonałej pamięci lub użycia klawiatury telefonu. Napisz program, który będzie pomocny w takich sytuacjach, tzn. zamieni numer telefoniczny z postaci tekstowej na postać numeryczną.
Wejście

Dane podawane są na standardowe wejście. W pierwszym wierszu podana jest liczba N (1<=N<=20) zestawów danych. Dalej podawane są zestawy danych zgodnie z poniższym opisem:
Jeden zestaw danych

W pierwszym i jedynym wierszu zestawu danych podany jest ciąg wielkich liter alfabetu łacińskiego – tekstowa postać numeru telefonicznego. Długość ciągu jest nie mniejsza niż 4 i nie przekracza 20 znaków.
Wyjście

Wyniki programu powinny być wypisywane na standardowe wyjście. W kolejnych wierszach należy podać odpowiedzi obliczone dla kolejnych zestawów danych. Wynikiem dla jednego zestawu jest cyfrowa postać numeru telefonicznego podanego na wejściu.
Przykład

dane wejściowe:
2
ALAMAKOTA
BRZECZYSZCZYKIEWICZ

wynik:
252625682
2793299792995439429

Poniżej daję kod, kod przechodzi przykładowe zadanie bez problemu, zwraca poprawny wynik, jak i dla innych danych też poprawny

//Main.java
import java.util.*;
import java.io.*;

public class Main {
public static void main(String args[])
throws IOException
{
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	String a;
int t;
Scanner keyboard = new Scanner(System.in);
String w[] = new String[21];
do {
t = keyboard.nextInt();
}while(t<1||t>21);
 for(int x =0;x<t;x++){
do {
	a = br.readLine();
a = a.toUpperCase();
}while(a.length()<4||a.length()>21);
char charArray[] = a.toCharArray();

	int b = a.length();
	String k = "";
for (int i=0;i<b;i++){
	if (charArray[i]=='A'){
		 k = k+"2";
	}
	if (charArray[i]=='B'){
		 k = k+"2";
	}
	if (charArray[i]=='C'){
		 k = k+"2";
	}
	if (charArray[i]=='D'){
		 k = k+"3";			 
	}
	if (charArray[i]=='E'){
		 k = k+"3";
	}
	if (charArray[i]=='F'){
		 k = k+"3";
	}
	if (charArray[i]=='G'){
		 k = k+"4";
	}
	if (charArray[i]=='H'){
		 k = k+"4";		 
	}
	if (charArray[i]=='I'){
		 k = k+"4";
	}
	if (charArray[i]=='J'){
		 k = k+"5";			 
	}
	if (charArray[i]=='K'){
		 k = k+"5";
	}
	if (charArray[i]=='L'){
		 k = k+"5";
	}
	if (charArray[i]=='M'){
		 k = k+"6";
	}
	if (charArray[i]=='N'){
		 k = k+"6";		 
	}
	if (charArray[i]=='O'){
		 k = k+"6";
	}
	if (charArray[i]=='P'){
		 k = k+"7";
	}
	if (charArray[i]=='Q'){
		 k = k+"7";
	}
	if (charArray[i]=='R'){
		 k = k+"7";		 
	}
	if (charArray[i]=='S'){
		 k = k+"7";
	}
	if (charArray[i]=='T'){
		 k = k+"8";		 
	}
	if (charArray[i]=='U'){
		 k = k+"8";				 
}
	if (charArray[i]=='V'){
		 k = k+"8";				 
}
if (charArray[i]=='W'){
		 k = k+"9";
}
if (charArray[i]=='X'){
		 k = k+"9";			 
}
if (charArray[i]=='Y'){
		 k = k+"9";
}
if (charArray[i]=='Z'){
		 k = k+"9";			 
}
}
w[x] = k;
}
    for(int i =0;i<t-1;i++){
    System.out.println(w[i]);
    }
    System.out.print(w[t-1]);
}

Robiłem zadanie na szybko, sklejone z moich różnych kodów źródłowych, temu trochę dziwnie wygląda, np scanner + bufferreader, ale wg mnie wszystko poprawne.
Długi kod, ale tylko przez to, że nie chciało mi się skracać literek A - Z.. bo tak jak teraz jest to zajmuje sporo, ale dla mnie liczy się wynik.

0

bez wczytywania, bo to można na różne sposoby rozwiązać i chyba nie ma sensu wymieniać wszystkich. Kod zwięzły i prosty:

package pl.koziolekweb.programmers.forum;
public class App {
	public static void main(String[] args) {

		String ala = "ALAMAKOTA";
		String brze = "BRZECZYSZCZYKIEWICZ";
		transform(ala);
		transform(brze);

	}

	private static void transform(String wyraz) {
		char[] cs = wyraz.toCharArray();
		for (char c : cs) {
			System.out.print(Mapa.valueOf(c + "").getKv());
		}
		System.out.println("");
	}
}

enum Mapa {
	A(2), B(2), C(2), D(3), E(3), F(3), G(4), H(4), I(4), J(5), K(5), L(5), M(6), N(6), O(6), P(7), Q(7), R(7), S(7), T(
			8), U(8), V(8), W(9), X(9), Y(9), Z(9);

	private final int kv;

	public int getKv() {
		return kv;
	}

	private Mapa(int kv) {
		this.kv = kv;
	}
}

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