Как изменить количество и содержание его данных - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь выполнить поиск и сортировку данных с помощью переключателя. я должен ввести количество данных и его членов. например:

количество данных: // например: 2 введите данные:

data num-1: // пользовательский ввод data num-2: // пользовательский ввод

выбор

case 1: // поиск данных

case 2: // bubbleort

case 3: // выборочная сортировка

case 4: // edit

я застрял на case 4. Я пробовал свой код, но количество данных и текущий нет изменяется вообще, и если я хочу изменить объем данных с большим числом, чем раньше, индекс выходит за пределы. вот код.

    public static void main(String[] args) {

    Scanner s=new Scanner(System.in);
    int n;
    System.out.println("-------------------data search and sort-------------------");
    System.out.println("");
    System.out.println("");
    System.out.println("Hai ");
    System.out.print("How many datas do you want? : ");
    n=s.nextInt();
    int bil[]=new int[n]; //bil is array
    System.out.println("input the data:");
    for(int i=1;i<=n;i++){
        System.out.print(" data -" +i+ " = ");
        bil[i-1]=s.nextInt();
    }
    System.out.println("");
    System.out.println("");
    while(true){
    
    System.out.println("Displaying data(s) : ");
    for(int i: bil){
        System.out.print(i+" ");
    }
    System.out.println("");
    System.out.println("Menu:");
    System.out.println("\t1. Search data");
    System.out.println("\t2. Bubblesort ascending");
    System.out.println("\t3. SelectionSort descending");
    System.out.println("\t4. Edit");
    System.out.println("\t5. Exit");
    System.out.print("What's your choice? : ");
    int pilih=s.nextInt();
    switch(pilih){
        case 1:
            System.out.println("Enter the number you are looking for = ");
            int srch = s.nextInt();
            boolean found = false;
            for(int index=0; index<bil.length; index++) {
            if(bil[index] == srch){
            found = true;
                }
            }
            if(found == true) {
            System.out.println("Found '"+srch + "' in data collection!");
            } else {
            System.out.println(srch + "there is no data you're looking for here");
            }
            System.out.println("");
            
            System.out.println("Displaying data : ");
            for(int i: bil){
            System.out.print(i+" ");
            }
            System.out.println("");
            System.out.print("Continue? (y/n)");
            String conti = s.next();
           
            boolean nue;
            switch(con){
            case "y":
            nue = false;
            break;
            case "n": 
                return;
            }
            break;
        case 2: 
             
            System.out.println("BubbleSorting is done!");
            System.out.println("");
            System.out.println("Displaying data(s) :");
            int i, j, te;
            for (i = 0; i < n; i++)
                for (i = 0; i < ( n - 1 ); i++) {
                    for (j = 0; j < n - i - 1; j++) {
                        if (bil[j] > bil[j+1]){
                            te = bil[j];
                            bil[j] = bil[j+1];
                            bil[j+1] = te;
                        }
                    }
            }
            for (i = 0; i < n; i++) {
                System.out.print(bil[i]);
            }
           
            System.out.print("Continue? (y/n)");
            conti = s.next();
            switch(conti){
            case "y":
            nue = false;
            break;
            case "n": 
                return;
            }
            break;
        case 3:
            for (i = 0; i < n; i++){
                for (j = i + 1; j < n; j++){
                    if (bil[i] < bil[j]){
                        te = bil[i];
                        bil[i] = bil[j];
                        bil[j] = te;
                    }
                }
            }
            System.out.print("SelectionSort is done");
            System.out.println("");
            System.out.println("Displaying data(s):");
            for (i = 0; i < n - 1; i++){
                System.out.print(bil[i] + " ");
            }
            System.out.print(bil[n - 1]);
            System.out.println("");
            System.out.print("Continue? (y/n)");
            conti = s.next();
            switch(conti){
            case "y":
            nue = false;
            break;
            case "n": 
                return;
            }
            break;
        case 4:
            System.out.print("WARNING!!! the data will be change!");
            System.out.print("continue? (y/t)");
            String change = s.next();
           
            boolean edit;
            switch(change){
            case "y":
            System.out.print("How many datas do you want? = ");
            n=s.nextInt();
            System.out.println("Input the data");
            for(i=1;i<=n;i++){
            System.out.print(" data -" +i+ " = ");
            bil[n]=s.nextInt();
            edit = false;
            }
            break;
            case "n": 
                return;
            }
            
            break;
        }    
    }       

ps: не забываю импортировать java .util.Scanner

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Так как вам нужно отбросить первоначально введенные данные и получить совершенно новый набор точек данных, сначала вам нужно создать новый массив с новым количеством точек данных. Затем вам нужно назначить пользовательские вводы этому массиву.

case 4:
    System.out.print("WARNING!!! the data will be change!");
    System.out.print("continue? (y/t)");
    String change = s.next();

    boolean edit;
    switch (change) {
        case "y":
            System.out.print("How many datas do you want? = ");
            n = s.nextInt();

            // Create a new array and assign it to the same variable bil
            bil = new int[n];

            System.out.println("Input the data");
            for (i = 1; i <= n; i++) {
                System.out.print(" data -" + i + " = ");

                // Add data point to the (i-1)th position of the array
                bil[i - 1] = s.nextInt();
                edit = false;
            }
            break;
        case "n":
            return;
    }
0 голосов
/ 06 августа 2020

Эй, проблема здесь в том, что вы уже объявляете массив как int bil = new int[n]; Итак, в вашем 4-м случае, когда вы берете еще один «n» в качестве ввода, который больше предыдущего «n», он выдает исключение ArrayIndexOutOfBoundsException. чтобы увеличить размер массива перед сохранением в нем дополнительных значений. Добавьте следующий код в свой 4-й случай после ввода нового «n»:

    bil = Arrays.copyOf(bil,n);

Для получения дополнительной информации обратитесь к этому ответу: Изменить размер массива, сохраняя текущие элементы в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...