这是我的问题:
我在“public static boolean validNumCheck(String num){” - “非法表达式开头”,“';'行上遇到了一些错误预期“,和”')'预期'。
如何为每个号码的用户提供3次尝试?我相信现在程序要求用户提供3个数字并总共给他们3次尝试以使数字正确(我的解释很糟糕...阅读代码以更好地了解我的意思)。
< / LI> 醇>这是我的代码:
import javax.swing.JOptionPane;
public class Assignment3 {
public static void main (String[] args){
final int MAX_TRIES = 3;
int[] attempts= new int[2];
String[] getNumber= new String [2];
//Ask the user for 3 integers.
while(attempts[0]<MAX_TRIES){
getNumber[0]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");
//Pass the value to validNumChek
validNumCheck (getNumber);
//If it is not a valid number give the user 3 more tries.
if (getNumber== false){
while(attempts[1]<MAX_TRIES){
getNumber[1]= JOptionPane.showInputDialog(null,"Please enter an integer between 0-200.");
attempts[1]++;}
}
attempts[0]++;
}
//Parse the string to an integer and check if it is a valid number.
public static boolean validNumCheck(String num){
int number;
try {
number = Integer.parseInt(num);
return number >= 0 && number <= 200;
}catch(NumberFormatException e){
//If it is not a valid number return false.
return false;
}
}
}
答案 0 :(得分:3)
我认为创建问题首先的伪代码或算法非常重要,然后如果它能够处理编程以后。否则你将同时解决两件事1.问题逻辑和2.实现细节。
我就是这样做的。
//The three numbers should be entered by a user in the main method.
MAIN PROGRAM starts
declare a , b , c as numbers
//The numbers should be positive and less than 200.
// see validNumCheck below.
//part 1.If not, the program asks the user to renter the number.
//part 2.The user will have three chances to enter a valid number for each number.
//part 3. If the number is still invalid after the three trials, the program displays an error message to the user and ends.
// ok then read a number and validate it.
attempts = 0;
maxAttempts = 3;
//part 2. three chances... .
loop_while ( attemtps < maxAttempts ) do // or 3 directly.
number = readUserInput(); // part 1. reenter the number...
if( numcheck( number ) == false ) then
attempts = attempts + 1;
// one failure.. try again.
else
break the loop.
end
end
// part 3:. out of the loop.
// either because the attempts where exhausted
// or because the user input was correct.
if( attempts == maxAttemtps ) then
displayError("The input is invalid due to ... ")
die();
else
a = number
end
// Now I have to repeat this for the other two numbers, b and c.
// see the notes below...
MAIN PROGRAM ENDS
这将是“validNumCheck”
的功能 // You are encouraged to write a separate method for this part of program – for example: validNumCheck
bool validNumCheck( num ) begin
if( num < 0 and num > 200 ) then
// invalid number
return false;
else
return true;
end
end
所以,我们已经达到了一个数字“a”可以被验证的点,但我们需要为“b”和“c”做同样的事情
而不是“复制/粘贴”您的代码,并使您的生活复杂化,尝试调整代码以满足需求,您可以创建一个函数并将该工作委托给新函数。
所以新的伪代码将是这样的:
MAIN PROGRAM STARTS
declare a , b , c as numbers
a = giveMeValidUserInput();
b = giveMeValidUserInput();
c = giveMeValidUserInput();
print( a, b , c )
MAIN PROGRAM ENDS
将逻辑移至新函数(或方法)
函数giveMeValidUserInput将是这样的(注意它几乎与第一个伪代码相同)
function giveMeValidUserInput() starts
maxAttempts = 3;
attempts = 0;
loop_while ( attemtps < maxAttempts ) do // or 3 directly.
number = readUserInput();
if( numcheck( number ) == false ) then
attempts = attempts + 1;
// one failure.. try again.
else
return number
end
end
// out of the loop.
// if we reach this line is because the attempts were exhausted.
displayError("The input is invalid due to ... ")
function ends
validNumCheck不会改变。
从那里传递代码将以某种方式直截了当。因为你已经了解了你想做什么(分析),以及你想怎么做(设计)。
当然,经验会更容易。
摘要
steps to pass from problem to code are:
阅读问题并理解(当然)。
识别可能的“功能”和变量。
写一下我将如何逐步(算法)
将其翻译成代码,如果有不能做的事情,请创建一个能为您完成并继续移动的功能。
答案 1 :(得分:2)
在method signature(即“public static int validNumCheck(num1,num2,num3)
”)中,您必须声明formal parameters的类型。 “public static int validNumCheck(int num1, int num2, int num3)
”应该可以解决问题。
但是,更好的设计是让validNumCheck
只接受一个参数,然后用三个数字中的每一个来调用它。
我的下一个建议(看过你的更新代码)就是你得到了一个不错的IDE。我刚刚在NetBeans中加载它并发现了许多错误。特别是,“非法开始表达”是因为你忘记了while循环中的}
,IDE会立即标记。在你通过“Hello world”之后,记事本就不再削减它了。
我不打算列出每个错误的更正,但请注意int[]
,int
,String[]
和String
都不同。您似乎可以互换使用它们(可能是由于您对代码所做的更改量)。同样,IDE会标记所有这些问题。
回复您的最新代码(修订版12):您越来越近了。您似乎已将MAX_TRIES
用于两个不同的目的:要输入的三个数字,以及每个数字的三个机会。虽然这两个数字是相同的,但最好不要对两者使用相同的常数。我会称之为NUM_INPUTS
和MAX_TRIES
。
你仍然没有为while循环添加缺少的}
。
在解决这些问题后,接下来要做的就是查看if (getNumber == false)
。
getNumber
是String[]
,因此这种比较是非法的。您应该将validNumCheck
的返回值变为变量,例如:
boolean isValidNum = validNumCheck(getNumber[0]);
而且,getNumber
没有理由成为一个数组。你一次只需要一个String
,对吗?
答案 2 :(得分:2)
方法定义中的每个参数都需要一个类型:
public static int validNumCheck(int num1, int num2, int num3){
但是我想知道为什么你把所有三个数字都传入,当时你只检查一个。如果数字为真,你想返回,所以返回值应该是一个布尔值:
public static boolean validNumCheck(int num){
// test and return true or false
此外,如果用户输入“abc”,您将从“Intger.pareInt(String)”方法中获得异常。也许您想将输入的文本存储为String并将其提供给validNumCheck,尝试转换它并检查它是否在0到200之间。
public static boolean isValidNumber(String num){
try {
int number = Integer.parseInt(num);
return number >= 0 && number <= 200;
}catch(NumberFormatException e){
return false;
}
}
编辑1: 对于三次尝试,您需要一个循环,该循环一直运行直到数字有效或进行三次尝试。只需在int中计算尝试次数。
顺便问一下,你确定你必须使用JOptionPane和JMessageDialog吗?这是GUI的东西,只是复杂的洞。您还可以使用System.out和System.in
读取和写入文本到控制台编辑2: 还有一个提示,当你创建一个给定长度的int数组时,数组中的每个位置都用0填充,所以你可以这样写:
int[] count= new int [3];
并且不需要:
count[0]=0;
count[1]=0;
count[2]=0;
如果你想使用0以外的其他值,你可以使用这样的较短形式:
int[] count = {1, 5, 2}
编辑3: 你应该做/学习的一件事是:不要编写整个事情并最终得到许多错误和一个没有运行的程序。 编码一点,测试一下。做一部分,看它跑,你很高兴。
这件事有没有运行过?我的意思是,你是否已经看到你尝试使用的JOptionPane-InputDialog?如果没有,请先执行此操作:(并运行它!)
public class Assignment3 {
public static void main (String[] args){
int[] numbers = new int[3];
for (int i = 0; i < numbers.length; i++) {
JOptionPane.showInputDialog("enter something");
}
}
}
让它运行?大!现在,尝试将该行与JOptionPane一起包装在循环中,直到用户输入有效数字(使用您已经获得的checkValidNum方法)或使用他的三次尝试。
答案 3 :(得分:2)
This thread可能会有所帮助。这些是从“问题描述”转变为“实际编码”的提示
根据您的具体问题:
如何为用户提供三次输入EACH号码有效号码的机会? (我不希望'回答'只是一些想法/提示。
如果你是现实生活中的收银员(记忆力差),你会怎么做?我的意思是非常非常糟糕的记忆,以至于你不记得你是第一次拒绝客户还是第二次?
我会把它写在一张纸上,每次我拒绝客户时我都会添加一个“|”
“| | |”
当纸上有三条线时,我会报警。 .. :)
这与此类似。如果你没有可能变化的 ,那么你将会进入一个无限的循环;)
validNumCheck是否在void main方法中返回值AND THEN exit
没有
...或者我可以在主方法中退出程序吗?
是
答案 4 :(得分:2)
当您计算(在现实生活中)时,您不需要将数字存储在方框中,您只需更改计数值并设置限制。
例如,您可以替换它:
int[] count= new int[2];
有了这个:
int attemtps = 0 ; // or count
int maxTries = 3;
您不能将整数数组分配给字符串数组。
String[] getNumber= new int [2];
使用字符串数组可能有效,但您必须分配一个字符串数组
String[] numbers = new String[2];
或者您可以使用int数组:
int [] numbers = new int [2];
选择一个。
记住数组就像可以存储值的框。