尝试设计简单的彩票计划。一切正常,除了检查输入的数字是否在1到59之间。
练习说数字必须存储在String
变量中。
所以
if(num<0 || num>59) //wont work for me
尝试制作另一个变量
int numConverted = Integer.parseInt(num)
我们没有在课堂上将String
转换为int
,但我认为这不是预期的。无论如何都很难以这样做,所以这可能是错误的。
这是我目前的代码。
{
Scanner scan = new Scanner(System.in);
String num=""; //num variable is empty untill user inputs numbers
for(int i =0; i<6; i++)
{
System.out.println("Enter your number between 1-59");
num = num +" "+ scan.nextLine();
}
System.out.println("Ticket printed £2. Your numbers are " + num);
}
答案 0 :(得分:1)
在您发布的代码中,您希望用户提供6个特定的数值。这些值附加到名为 num (空格分隔)的String变量中。你需要在这里做一些事情:
1)确保用户提供的值确实是一个数值;
2)确保所提供的数值在彩票本身的最小和最大范围内(您所说的是:1至59);
3)确保用户输入的号码尚未提供。
您的任务是将输入的值存储到String数据类型变量中,这一切都很好,但在某些时候您需要进行值比较以确保所有输入的值实际上都在限制范围内彩票。
当用户完成他/她的条目时,您最终会在 num 字符串变量中保留一个以空格分隔的字符串。您现在需要确保输入的这些值确实是....数字从1到59并且没有包含字母字符。
在我看来(这只是因为你需要将输入的值存储到String变量中),最好使用String变量来收集用户输入,然后测试输入以确保它确实是实际整数的字符串表示形式。一旦确定,我们测试以确定是否落在最小值/最大值限制范围内(1-59)。现在我们需要进行测试,以确保此票证之前输入的号码尚未输入。
当然,对于上述每个测试,如果一个失败,则应提示用户重新输入正确的值。您可以使用 while 循环来完成此操作。 StackOverflow中有很多例子,但这里有一个简单的例子:
Scanner scan = new Scanner(System.in);
String ticketNumbers = "";
for(int i = 0; i < 6; i++) {
Boolean isOK = false;
while (!isOK) {
System.out.println("\nPlease enter your desired 6 ticket numbers:\n"
+ "(from 1 to 59 only)");
String num = scan.nextLine();
//Is the string entered an actual integer number?
//We use the String.matches() method for this with
//a regular expression.
if(!num.matches("\\d+")) {
System.out.println("You must supply a numerical value! "
+ "Try Again...");
continue;
}
if (ticketNumbers.contains(num + " ")) {
System.out.println("The number you supplied has already been chosen!"
+ " Try Again...");
continue;
}
if (Integer.parseInt(num) >= 1 && Integer.parseInt(num) <= 59) {
ticketNumbers+= num + " ";
isOK = true;
}
else {
System.out.println("The number you supply must be from "
+ "1 to 59! Try Again...");
}
}
}
System.out.println("Ticket printed £2. Your numbers are " + ticketNumbers);
答案 1 :(得分:0)
怎么样 -
if(Integer.parseInt(num) < 0 || Integer.parseInt(num) > 59)
这应该有效,在输入后放置。
如果有效,请将此标记为正确,我需要代表!!!
答案 2 :(得分:0)
简单的方法是添加可用的数字(假设它不会增长超过60.你也可以使用循环来添加它)
String numbers[] = {"1","2","3", "..."};
然后在循环内
Arrays.asList(numbers).contains(num);
您可以删除前缀零,以避免与'02'
此处所有内容都与String
相关。
答案 3 :(得分:0)
如果您不想显式转换为int
,则可以使用正则表达式。
if (num.matches("[1-5]?[0-9]")) {
...
检查字符串是否包含(1)可能 1到5的数字,然后是(2)肯定从0到9的数字。 ll匹配0-59范围内的任何数字。
如果你有一系列由空格分隔的数字,你可以扩展它以涵盖这样的整个系列。
if (num.matches("([1-5]?[0-9]\\s+)*[1-5]?[0-9]")) {
这匹配“数字后跟空格”的任意数量的重复(包括零),然后是没有空格的单个重复。 "\\s"
表示“任何空白字符”,"+"
表示“前面的一个或多个”,"*"
表示“更多的前面” - 在此case是括号中的术语。
答案 4 :(得分:-2)
哦,我明白你要做什么了
这就是你想要的
Scanner scan = new Scanner(System.in);
String allNums = "";
for(int i =0; i<6; i++)
{
System.out.println("Enter your number between 1-59");
int num = scan.nextInt();//Take the number in as an int
if(num >0 && num < 59)//Check if it is in range
{
allNums += num + " ";//if it is add it to a string
}
else
{
System.out.println("Number not in range");
i--;//go back one iteration if its not in range
}
}
System.out.println("Ticket printed £2. Your numbers are " + allNums);