Професионална програма
Loading...
PlamenNeykov avatar PlamenNeykov 3 Точки

Задача "Moving Target" минава на 40/100

Здравейте,

Моля за съдействие, в "judge" ми дава 40/100. Прегледах доста решения, но не намирам къде греша. Моя код е:

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class ExMitExamMovingTarget {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        List<Integer> input = Arrays.stream(scanner.nextLine().split("\\s+"))
                .map(Integer::parseInt)
                .collect(Collectors.toList());

        String[] command = scanner.nextLine().split("\\s+");

        while (!command[0].equals("End")) {
            String task = command[0];
            int index = Integer.parseInt(command[1]);

            switch (task) {
                case("Shoot"):
                    if (index>=0&&index<input.size()) {
                        int power = Integer.parseInt(command[2]);
                        int workNum = input.get(index);
                        workNum=workNum-power;

                        if(workNum>0) {
                            input.set(index,workNum);
                        } else {
                            input.remove(index);
                        }
                    } else {
                        break;
                    }
                    break;
                case ("Add"):
                    if (index>=0&&index<input.size()) {
                        int value = Integer.parseInt(command[1]);
                        input.add(index,value);
                    } else {
                        System.out.println("Invalid placement!");
                    }
                    break;
                case ("Strike"):
                    if (index>=0&&index<input.size()) {
                     int value = Integer.parseInt(command[2]);
                     int end = index+value;
                     int start = index-value;

                     if (start>=0&&end<input.size()) {
                         for (int i = start; i <= end; i++) {
                             input.remove(start);
                         }
                     } else {
                         System.out.println("Strike missed!");
                     }
                    }
                    break;
            }

            command = scanner.nextLine().split("\\s+");
        }

        List<String> toPrint = new ArrayList<>();

        for (int i = 0; i < input.size(); i++) {

            toPrint.add(String.valueOf(input.get(i)));
        }
        System.out.println(String.join("|",toPrint));

    }
}

 

Благодаря предварително за съдействието.

Спорен ден.

 

 

 

Тагове:
0
Java Fundamentals
MANEKENA avatar MANEKENA 118 Точки
Best Answer
 for (int i = start; i <= end; i++) {
                             input.remove(start);
                         }

имаш лист 1 2 3 4 5 6 7 8 9 

да речем ,че стартираш от индекс 1 , премахваш елемента на индекс 1

 индекса става i++ демек равен на 2  и какво се случва ?

листа изглежда така в момента - 1 3 4 5 6 7 8 9

премахваш от индекс 2 - листа изглежда 1 3 5 6 7 8 9 

start  = 3 - премахваш и елемента на индекс 3 и листа изглежда така - 1 3 5 7 8 9

според теб отговаря ли на условието това действие ? 

ети ти примерно решение  , разгледай и в цикъл никога не прави remove 

https://github.com/Petrov-connect/Java-Fundamentals/blob/master/MidExam/MovingTarget.java

0
23/02/2021 17:55:38
PlamenNeykov avatar PlamenNeykov 3 Точки

Здравей,

Благодаря за детайлното обяснение и отделеното време.

Пламен 

0