Софтуерно Инженерство
Loading...
+ Нов въпрос
Tsveten.kavrakov avatar Tsveten.kavrakov 6 Точки

Задача 2. Change List дава Runtime error на единия от тестовете

Здравейте,

Не можах да открия къде се дъни.

Моля помогнете да намеря грешката.

Приятен ден!

Задачата е :

Write a program, which reads a list of integers from the console and receives commands, which manipulate the list. Your program may receive the following commands:

  • Delete {element} – delete all elements in the array, which are equal to the given element
  • Insert {element} {position} – insert element and the given position

You should stop the program when you receive the command "end". Print all numbers in the array separated with single whitespace.

Examples

Input

Output

1 2 3 4 5 5 5 6

Delete 5

Insert 10 1

Delete 5

end

1 10 2 3 4 6

20 12 4 319 21 31234 2 41 23 4

Insert 50 2

Insert 50 5

Delete 4

end

20 12 50 319 50 21 31234 2 41 23

 

Решението ми е:

import java.util.*;
public class Main {

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

        List<Integer> intList = new ArrayList<Integer>();
        int[] intArr=Arrays.stream(sc.nextLine().split(" ")).mapToInt(e->Integer.parseInt(e)).toArray();

        for (int i:intArr){
            intList.add(i);
        }

        String strInput="";
        while(!(strInput=sc.nextLine().toLowerCase()).equals("end")){
            String[] inputArr=strInput.split(" ");
            switch (inputArr[0]){
                case "insert":
                    int element=Integer.parseInt(inputArr[1]);
                    int index=Integer.parseInt(inputArr[2]);
                    if (index >= 0 && index < intList.size()){
                        intList.add(index,element);
                    }
                    break;
                case "delete":{
                    int searchVal=Integer.parseInt(inputArr[1]);
                    intList.removeAll(Collections.singleton(searchVal));
                    break;
                }
            }
        }
        for (int i=0;i<intList.size();i++){
            System.out.printf("%d ",intList.get(i));
        }
    }
}

 

Тагове:
0
Java Fundamentals
PetarIliev1 avatar PetarIliev1 59 Точки

Грешката ти е:

String[] inputArr=strInput.split(" ");

Трябва да е :

String[] inputArr=strInput.split("\\s+");

Явно има тест от сорта на 2 3 4   5 и то опитва да парсне whitespace към инт.

(\\s+) - един space или повече.

 

0
19/06/2019 21:22:03
Tsveten.kavrakov avatar Tsveten.kavrakov 6 Точки

Благодаря, явно е време да науча regex .

Некоректно е ,че никъде в условието не беше казано,че може да има повече от един интервал във входните данни.

Успех!

0