【问题标题】:check the input if inside the ArrayList检查输入是否在 ArrayList 内
【发布时间】:2019-05-01 05:51:34
【问题描述】:

我写了 2 ArrayList type String 包含日期和可能的时间,我希望用户输入输入,然后检查输入是否来自数组,它会显示输入无效的消息,并且用户再次输入。但是我的代码的结果却给了我相反的结果:(当我在数组之外输入一些东西时,它会接受它 我的代码有什么问题?? 请告诉我正确的代码:(

package javaapplication19;

import java.util.ArrayList;
import java.util.Scanner;

public class JavaApplication19 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<String> dayArray = new ArrayList<>();
        ArrayList<String> timeArray = new ArrayList<>();
        dayArray.add("sunday");
        dayArray.add("monday");
        dayArray.add("tuesday");
        dayArray.add("wednesday");
        dayArray.add("thursday");
        timeArray.add("8am");
        timeArray.add("9am");
        timeArray.add("10am");
        timeArray.add("11am");
        timeArray.add("12pm");
        timeArray.add("1pm");
        timeArray.add("2pm");
        timeArray.add("3pm");
        timeArray.add("4pm");

        System.out.println("please enter day :");
        String a1 = input.nextLine();
        for (int g = 0; g < dayArray.size(); g++){
            if (dayArray.get(g).equals(a1))
                System.out.println("invalid day , please enter another day : ");
        a1 = input.nextLine();
}

        System.out.println("please enter time : ");
        String a2 = input.nextLine();
        for (int s = 0; s < timeArray.size(); s++) {
            if (timeArray.get(s).equals(a2))
                System.out.println("invalid time , please enter another time : ");
            a2 = input.nextLine();

        }
    }
}

【问题讨论】:

  • 您在寻找dayArray.contains吗?
  • 你知道dayArray.get(g).equals(a1)是什么意思吗?
  • 我认为您使用括号可能会导致您的一些问题
  • 你检查输入是否相等,但想检查它是否不相等。所以只需添加一个“!”在你的 if 子句中

标签: java oop arraylist


【解决方案1】:

您可以使用下面的代码并找到 if 条件的变化。

System.out.println("please enter time : ");
String a2 = input.nextLine();
for (int s = 0; s < timeArray.size(); s++) {
if (!timeArray.get(s).equals(a2))
System.out.println("invalid time , please enter another time : ");
a2 = input.nextLine();
}

【讨论】:

  • 什么?这不是一个正确的解决方案,不是吗?!您正在遍历列表的元素,每次它与输入不匹配时打印出它是无效的——这显然是错误的。您应该只在循环完 all 元素后打印它。更奇怪的是,你在每次迭代中都要求一个新的输入。这也很奇怪
  • @ishadenkhaled 答案是错误的,不能按预期工作
【解决方案2】:

你可以这样做:

    String a1 = input.nextLine();
    if (!dayArray.contains(a1))
        System.out.println("invalid day , please enter another day : ");
    else {
        System.out.println("day really nice day");
    }

无需遍历数组。方法 contains() 为您完成它

【讨论】:

  • 很高兴看到有人在不粘贴代码墙的情况下回答问题
【解决方案3】:

你的代码应该是这样的。

System.out.println("please enter day :");

boolean validDate = false;

while(!validDate){
    String a1 = input.nextLine();
    if(dayArray.contains(a1)){
        System.out.println("invalid day , please enter another day : ");
    }else{
        validDate=true;
    }
}

boolean validHour = false;
System.out.println("please enter a time : ");
while(!validHour){
    String a2 = input.nextLine();
    if(timeArray.contains(a2)){
        System.out.println("invalid time , please enter another time : ");
    }else{
        validHour=true;
    }
}

【讨论】:

  • 除了发布代码之外,您还可以解释 OP 做错了什么以及如何修复它
【解决方案4】:

我确实重构了你的代码,并让一些 cmets 更容易理解

Scanner input = new Scanner(System.in);
List<String> dayArray = Arrays.asList("sunday","monday","tuesday","wednesday","thursday");
List<String> timeArray = Arrays.asList("8am","9am","10am","11am","12pm","1pm","2pm","3pm","4pm");

String a1 = "";
String a2 = ""; //Store user input

boolean nextInput = false; // flag indicate we continue or we force user re-enter information
//try to read the day input
while (!nextInput) {
    System.out.println("please enter day :");
    a1 = input.nextLine();
    nextInput = dayArray.contains(a1);
}

//try to read the time input
nextInput = false; //<= reset flag
while(!nextInput) {
    System.out.println("please enter time : ");
    a2 = input.nextLine();
    nextInput = timeArray.contains(a2);
}

System.out.println("day :" + a1);
System.out.println("time :" + a2);
System.out.println("program finished");

input.close(); //close scanner

【讨论】:

    【解决方案5】:

    这样写

    System.out.println("please enter day :");
        String a1 = input.nextLine();
        while (!dayArray.contains(a1)){
            System.out.println("invalid day , please enter another day : ");
            a1 = input.nextLine();
        }
        System.out.println("please enter time : ");
        String a2 = input.nextLine();
        while (!timeArray.contains(a2)){
            System.out.println("invalid time , please enter another time : ");
            a2 = input.nextLine();
        }
    

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 2018-03-28
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多