有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从循环中获取数组元素

我试图从数组中获取一个元素,并在以后的代码中使用它,但代码中有一些逻辑错误。我希望用户输入他或她需要清洁的日期,然后打印出清洁的日期。代码如下:

import java.util.Scanner;

public class arrayLoopTest {

    public static void main(String[] args) {
        Scanner scr = new Scanner(System.in);
        String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };

        int i = 0;
        while (true) {
            System.out.println("On what day should the cleaning be scheduled ? ");
            String schedule = scr.nextLine();

            for (i = 0; i < days.length; i++) {

                if (days[i].equals(schedule)) {

                    System.out.println("Cleaning scheduled for " + schedule);

                } else {
                    System.out.println("Invalid, You have to choose one of these days: \n " + days[i]);
                }
            }

        }
    }
}

控制台输出

On what day should the cleaning be scheduled ? 
Thursday
Invalid, You have to choose one of these days: 
Monday
Invalid, You have to choose one of these days: 
Tuesday
Invalid, You have to choose one of these days: 
Wednesday
Cleaning scheduled for Thursday
Invalid, You have to choose one of these days: 
Friday
Invalid, You have to choose one of these days: 
Saturday
Invalid, You have to choose one of these days: 
Sunday
On what day should the cleaning be scheduled ? 

共 (6) 个答案

  1. # 1 楼答案

    在检查任何一天是否匹配时,您要检查它是否匹配day[i],并立即打印结果(甚至在检查数组的其余部分是否匹配之前)

    一种可能的解决方案是跟踪用户输入是否已将一天与布尔值匹配。试着这样做:

    public static void main(String[] args) {
            Scanner scr = new Scanner(System.in);
            String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    
            int i = 0;
    
            boolean validEntry;
            while (true) {
    
                validEntry = false;
                System.out.println("On what day should the cleaning be scheduled ? ");
                String schedule = scr.nextLine();
    
                for (i = 0; i < days.length; i++) {
    
                    if (days[i].equals(schedule)) {
                        System.out.println("Cleaning scheduled for " + schedule);
                        validEntry = true;
                    }
                }
    
                if (!validEntry) {
                    System.out.println("Invalid, You have to choose one of these days: \n" + Arrays.toString(days));
                }
            }
        }
    

    注意,我也改变了

    System.out.println("Invalid, You have to choose one of these days: \n" + days[i]);
    

    对这个

    System.out.println("Invalid, You have to choose one of these days: \n " + Arrays.toString(days));
    
  2. # 2 楼答案

    我认为逻辑错误在于,在循环数组时打印响应,所以它总是打印出“无效…”至少六次

    相反,您可以在数组中循环,直到找到匹配项,然后根据是否找到匹配项打印响应:

            boolean scheduleIsValid = false;
            for (i = 0; i < days.length; i++) {
                if (days[i].equals(schedule)) {
                    scheduleIsValid = true;
                    break; // Leave the for loop, we've already found what we were looking for.
                }
            }
    
            if (scheduleIsValid) {
                System.out.println("Cleaning scheduled for " + schedule);
                break; // Leave the while loop.
            } else {
                System.out.println("Invalid, You have to choose one of these days: \n " + days);
            }
    
  3. # 3 楼答案

    Java Arrays实用程序是你的选择。不用手动循环,你可以从数组中提取ArrayList,使用IndexOf找到你的一天

    List listOfDays = Arrays.asList(days);
    int dayIndex = listOfDays.IndexOf(schedule);
    
    if (dayIndex >= 0)
    {
        System.out.println("Cleaning scheduled for " + listOfDays[dayIndex]);
    }
    else
    {
        System.out.println("Invalid " + schedule); // Perform error handling as you wish
    }
    

    资料来源:

    http://www.tutorialspoint.com/java/util/arrays_aslist.htm

    http://www.tutorialspoint.com/java/util/arraylist_indexof.htm

  4. # 4 楼答案

    请注意,有更有效、更简单的方法可以从循环中获取数组元素,但这是一种简单的方法,初学者应该很容易遵循

    您有一个很好的for循环,但是在检查整个数组以查看用户输入是否匹配数组中的任何值之前,您正在向用户打印文本。我做了一个名为dayIsValid的布尔值,检查用户输入的字符串是否为有效日期。如果日期有效,则会打印出所需的消息。请注意,只有在我查看整个数组后,才会打印此消息

    我注意到的另一件事是,您试图打印字符串数组中的所有日期,但只打印了一天。为了解决这个问题,我在字符串数组中循环,打印出值。希望这个解释对你有所帮助。如果您有任何问题,请随时在下面发表评论

    Scanner scr = new Scanner(System.in);
    String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
    boolean continueLooping = true;
    //be aware that this while loop will execute infinitely, unless you change continuelooping to false inside the while loop
    while (continueLooping) {
        System.out.println("On what day should the cleaning be scheduled ? ");
        String dayScheduledForCleaning = scr.next();
        boolean dayIsValid = false;
        for (int i = 0; i < days.length; i++) {
            if (days[i].equalsIgnoreCase(dayScheduledForCleaning)) {
                System.out.println("Cleaning scheduled for " + dayScheduledForCleaning);
                dayIsValid = true;
                break;
            }
        }
        if(! dayIsValid) {
            System.out.println("Invalid, You have to choose one of these days:");
            for(int i = 0; i < days.length; i++)
                System.out.println(days[i]);
        }
    }
    
  5. # 5 楼答案

    试试这个:

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class ArrayLoopTest {
        public static void main(String[] args) {
            Scanner scr = new Scanner(System.in);
            String[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
    
            int i = 0;
            while (true) {
                System.out.println("On what day should the cleaning be scheduled ? ");
                String schedule = scr.nextLine();
    
                for (i = 0; i < days.length; i++) {
    
                    if (days[i].equals(schedule)) {
    
                        System.out.println("Cleaning scheduled for " + schedule);
                        break;
                    }
                }
    
                if (i == days.length){
                    System.out.println("Invalid, You have to choose one of these days: \n " + Arrays.asList(days));             
                }
    
            }
        }
    }
    

    如果您担心性能,可以使用哈希集。如果你不知道如何使用,只需发送一条消息,我就会发布解决方案

  6. # 6 楼答案

    一个非常简单的方法是添加另一个变量:

    String savedVar = ""; 
    ....
    if (days[i].equals(schedule)) {
                savedVar = schedule; //save your user input here
                System.out.println("Cleaning scheduled for " + schedule);
    
            } else {
                System.out.println("Invalid, You have to choose one of these days: \n " + days[i]);
            }
    

    然后在以后的代码中使用savedVar