Как использовать пользовательский ввод для строкового массива, который находится в цикле while? - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь преобразовать пользовательский ввод из вопроса об имени ученика и балле в массив.Мне также нужна помощь для распечатки массива.Цикл while использует логическое loopNaming в качестве условия, и я обновляюсь каждый раз, когда происходит цикл.

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

        boolean loopNaming=true;
        int i=0;
        String[] name = new String[i];



         while(loopNaming==true)
            {
                System.out.printf("Enter name of student or done to finish: ");
                name[i] = keyboard.next();

                if(name[i].equals("done"))
                {
                    loopNaming = false;
                }
                else
                {
                    System.out.println("Enter score: ");
                    score = keyboard.nextDouble();
                }
                i=i+1;

            }
            System.out.println(name[i]);

        }
    }

Ответы [ 5 ]

0 голосов
/ 11 октября 2018

Вы объявили массив String с размером 0. Поэтому вы не можете добавлять в него элементы.

import java.util.Scanner;

public class NameArray {
 public static void main(String [] args){
     Scanner keyboard = new Scanner(System.in);
     double score[] = new double[10];

     boolean loopNaming=true;
     int i=0;
     String namae;
     String[] name = new String[10];
     int count = 0;


     while(loopNaming==true){
         System.out.printf("Enter name of student or done to finish: ");
         name[i] = keyboard.next();

         if(name[i].equals("done")){
             loopNaming = false;
         }
         else{
            System.out.println("Enter score: ");
            score[i] = keyboard.nextDouble();
            count++;
         }
         i=i+1;

     }
     for(int j = 0; j < count; j++) {
         System.out.println(name[j]+" "+score[j]);
     }
 }
}

Попробуйте этот код, или вы можете использовать любые другие структуры данных.

0 голосов
/ 11 октября 2018
 public static void main(String [] args)
    {
        Scanner keyboard = new Scanner(System.in);
        double score;

        boolean loopNaming=true;
        int i=0;
        ArrayList<String> name = new ArrayList<>();



        while(loopNaming==true)
        {
            System.out.printf("Enter name of student or done to finish: ");

            String input = keyboard.next();
            if(input.equals("done"))
            {
                loopNaming = false;
            }
            else
            {   name.add(input);
                System.out.println("Enter score: ");
                score = keyboard.nextDouble();
            }
            i=i+1; //no need to use

        }
        System.out.println(name);

    }

Вы должны использовать dynamic list, потому что вы не можете изменить размер массива в Java.Второй пункт , когда пользователь дает «готово», вы не должны помещать его в список , поэтому проверьте его перед вставкой.

0 голосов
/ 11 октября 2018

Вы можете упростить логику вашей программы и написать что-то вроде этого,

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

    List<String> nameList = new ArrayList<String>();
    List<Double> scoreList = new ArrayList<Double>();

    while (true) {
        System.out.printf("Enter first name of student or done to finish: ");
        String fname = keyboard.next();
        if (fname.equals("done")) {
            break;
        }
        System.out.printf("Enter last name of student: ");
        String lname = keyboard.next();
        nameList.add(fname + " " + lname);
        System.out.println("Enter score: ");
        scoreList.add(keyboard.nextDouble());
    }
    keyboard.close();
    System.out.println("Names: " + nameList);
    System.out.println("scores: " + scoreList);
}
0 голосов
/ 11 октября 2018

Сначала я бы порекомендовал использовать структуру данных List:

    public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    double score;
    boolean loopNaming = true;
    List<String> name = new ArrayList<>();

    while (loopNaming) {
        System.out.printf("Enter name of student or done to finish: ");
        String input = keyboard.next();

        if (input.equals("done")) {
            loopNaming = false;
        } else {
            name.add(input);
            System.out.println("Enter score: ");
            score = keyboard.nextDouble();
        }
    }
    System.out.println(name.toString());
}

Однако, если вы очень хотели бы использовать массив, вы можете каждый раз создавать собственный метод увеличения размера массива.добавлено новое имя:

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    double score;
    int i = 0;
    boolean loopNaming = true;
    String[] name = {};

    while (loopNaming) {
        System.out.printf("Enter name of student or done to finish: ");
        String input = keyboard.next();

        if (input.equals("done")) {
            loopNaming = false;
        } else {
            name = increaseArray(name);
            name[i] = input;
            System.out.println("Enter score: ");
            score = keyboard.nextDouble();
            i++;
        }
    }
    System.out.println(Arrays.toString(name));
}

public static String[] increaseArray(String[] arr) {
    String[] temp = new String[arr.length + 1];
    for (int i = 0; i < arr.length; i++) {
        temp[i] = arr[i];
    }
    return temp;
}

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

Надеюсь, это поможет.

0 голосов
/ 11 октября 2018

Я изменил массив на arraylist и переместил i = i + 1;внутри другого сегмента.Также изменен итоговый оператор печати для печати списка.

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

      boolean loopNaming=true;
      int i=0;
      ArrayList<String> name = new ArrayList<String>();



       while(loopNaming==true)
          {
              System.out.printf("Enter name of student or done to finish: ");
              name.add(keyboard.next());

              if(name.get(i).equals("done"))
              {
                  loopNaming = false;
              }
              else
              {
                  System.out.println("Enter score: ");
                  score = keyboard.nextDouble();
                  i=i+1;
              }

          }
          System.out.println(name);
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...