簡體   English   中英

如何將用戶輸入用於while循環中的字符串數組?

[英]How do i use user input for a string array that is in a while loop?

我正在嘗試將來自學生姓名和分數的問題的用戶輸入轉換為數組。 我還需要幫助以打印出陣列。 while循環使用boolean loopNaming作為其條件,並且每次循環發生時都會更新i。

 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]);

        }
    }

您可以簡化程序的邏輯並編寫如下內容,

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);
}

我將數組更改為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);
      }

我首先建議使用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;
}

我不確定分數計分法是什么計划,但這是實現所需結果的兩種方法。

我希望這有幫助。

 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的String數組。這就是為什么不能在其中添加元素的原因。

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]);
     }
 }
}

嘗試使用此代碼,否則您可以使用任何其他數據結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM