我正在创建一个模拟随机游走的程序,它要求用户输入整数步骤来进行游走。
对此的提示使用与此非常类似的代码:
**% Ask user for a number.
defaultValue = 45;
titleBar = 'Enter a value';
userPrompt = 'Enter the integer';
caUserInput = inputdlg(userPrompt, titleBar, 1,{num2str(defaultValue)});
if isempty(caUserInput),return,end; % Bail out if they clicked Cancel.
% Round to nearest integer in case they entered a floating point number.
integerValue = round(str2double(cell2mat(caUserInput)));
% Check for a valid integer.
if isnan(integerValue)
% They didn't enter a number.
% They clicked Cancel, or entered a character, symbols, or something else not allowed.
integerValue = defaultValue;
message = sprintf('I said it had to be an integer.\nI will use %d and continue.', integerValue);
uiwait(warndlg(message));
end**
但是,如果用户第一次没有输入整数,我希望它再次显示“输入值”提示,即4.4。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
if (mod(integerValue,1) == 0)
如果integerValue是整数,将评估为true。只需用这个逻辑来增加你的if语句。您可能需要考虑更改为使用while循环,以便用户可以多次输入错误输入。
答案 1 :(得分:1)
第一个答案对于检查整数值是完全正确的,但是为了解决“再次显示提示”问题,你可以使用循环调节它来获得你想要的确切数据类型:
caUserInput = nan; %or anything worng for that matter
while isempty(caUserInput) || isnan(caUserInput)
caUserInput = inputdlg(userPrompt, titleBar, 1,{num2str(defaultValue)});
end
如果你想要的话,你可以用更加花哨的风格用不同的参数线重新开始它:
inputiswrong = 1; %or anything worng for that matter
while inputiswrong
inputiswrong = 0;
caUserInput = inputdlg(userPrompt, titleBar, 1,{num2str(defaultValue)});
if isempty(caUserInput )
userPrompt = 'Try again with an input';
inputiswrong = 1;
end
if isnan(caUserInput )
userPrompt = 'not really a number';
inputiswrong = 1;
end
%and so on
end
在这两种情况下你应该考虑将caUserInput转换为你可以使用的东西,我认为inputdlg返回一个单元格,所以可能是inputdlg()周围的cell2mat()。
答案 2 :(得分:1)
请记住,MATLAB中未指定的输入默认为双精度。例如,a=3
不是整数。所以你应该考虑两种情况:
如果您在MATLAB中讨论整数类型,最简单的方法是使用MATLAB的isinteger
函数:
tf = isinteger(A)
例如:
isinteger(4.4)
=
0
如前所述,3不是整数:
isinteger(3)
=
0
但实际上这个是整数:
isinteger(uint8(3))
=
1
重复输入查询也可以在while循环中轻松使用相同的功能
while ~isinteger(a)
disp('enter an integer');
....
end
但是如果你认为常规常量输入是整数,你可以将它们转换为整数并将结果与原始值进行比较:
while a ~= double(int64(a))
disp('enter an integer');
....
end
int64
将double类型转换为整数,double
将其转换为double。如果在此过程中数字保持不变,那么您可以认为它是一个整数。
我会使用fix
函数去掉小数部分。通常当您收到包含十进制值的双精度数时,主要意图是浮点前的数字。因此,在许多算法中,通常的做法是使用fix
将给定数字的每个元素四舍五入到最接近零的整数。