Условие: 
Loading...
dmivanova avatar dmivanova 1 Точки

Задача Seats - For Loop.

Здравейте, реших задачата по няколко начина, но всеки път достигам до 75/100 и не мога да разбера защо. Може ли вякой да погледне и да ми каже къде греша, много благодаря. :) 

Условие: 

Деси е купила няколко билета за концерт, на които обаче не са споменати местата в залата, за които са закупени. Тя вижда зависимост между различния формат на билетните номера. Местата, на които отговарят билетите се образуват според следните правила и формат:

- Номер с 4 символа

-  Ако първия символ е главна буква от латинската азбука:

   {първи символ} {втори символ} {трети символ}

  • Ако първия символ не е главна буква от латинската азбука:

   {четвърти символ} {втори символ} {трети символ}

- Номер с 5 или 6 символа {първи символ} {ASCII стойността на втория символ}

Напишете програма, която да помогне на Деси да разшифрова билетните номера.

Вход

  • Първи ред – брой билети, които Деси е закупила – цяло число в интервала от [2… 100]
  • За всеки билет чете билетния номер – текст

Изход

Да се отпечата разшифрования номер на място за всеки билет във формат:
"Seat decoded: {номера}"

Код:

package seats;

import java.util.Scanner;

public class Seats {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scanner = new Scanner(System.in);

		int ticketCounter = Integer.parseInt(scanner.nextLine());

		for (int i = 0; i < ticketCounter; i++) {
			String ticketNumber = scanner.nextLine();

			char firstCharacter = ticketNumber.charAt(0);
			char secondCharacter = ticketNumber.charAt(1);
			char thirdCharacter = ticketNumber.charAt(2);
			char fourthCharacter = ticketNumber.charAt(3);

			if (ticketNumber.length() == 4) {
				if (Character.isUpperCase(ticketNumber.charAt(0))) {
					System.out.printf("Seat decoded: %s%s%s%n", firstCharacter, secondCharacter,
							thirdCharacter);
				} else if (Character.isDigit(ticketNumber.charAt(0))) {
					System.out.printf("Seat decoded: %s%s%s%n", fourthCharacter, secondCharacter,
							thirdCharacter);
				}
			} else if (ticketNumber.length() == 5 || ticketNumber.length() == 6) {
				char asciiCharacter = secondCharacter;
				int ascii = (int) asciiCharacter;
				System.out.printf("Seat decoded: %s%s%n", firstCharacter, ascii);

			}

		}

	}

}
Тагове:
0
Programming Basics with Java
hm6566 avatar hm6566 52 Точки

Здравей,


Надявам се, че не ти е късно вече. Пропускът ти е в else-a на проверката за билет от четири символа. В условието се казва "ако не е главна буква", а не "ако е цифра". Има доволен брой символи, които не са нито главни букви, нито цифри, така че просто else е напълно достатъчно. :)
 

Накрая също можеш да използваш просто esle. Ако не е четири символа билетът - ще е 5 или 6, няма други варианти. Излишно е и да извеждаш нови променливи. Просто си взимаш вече съществуващата в int.


Ето промените: 
 

if (ticketNumber.length() == 4) {

    if (Character.isUpperCase(ticketNumber.charAt(0))) {

    System.out.printf("Seat decoded: %s%s%s%n", firstCharacter, secondCharacter, thirdCharacter);

    } 

    else if (Character.isDigit(ticketNumber.charAt(0))) {
    
    System.out.printf("Seat decoded: %s%s%s%n", fourthCharacter, secondCharacter, thirdCharacter);
    }

} else if (ticketNumber.length() == 5 || ticketNumber.length() == 6) {

    char asciiCharacter = secondCharacter;
    int ascii = (int) asciiCharacter;
    System.out.printf("Seat decoded: %s%d%n", firstCharacter, (int) secondCharacter);
}


Успех!

0
01/11/2019 19:27:11