我正在尝试创建一个脚本,允许用户重复输入x值,直到输入了每一种情况。我有三个可能的案例:
x <= 7时输入案例17 <= x <= 12时输入案例2。x > 12时输入案例3我想使用一个while语句来出错--检查用户输入,确保x > 0。每次输入一个案例时,我都要打印案例编号&创建的y值:
y = x^3 + 3y = (x-3)/2y = 4*x+3任何案件都不能进行两次审理。如果发生这种情况,脚本将输出类似于“已运行的情况”之类的内容。一旦所有案例都被输入,我想打印类似于‘所有案例都被输入’的东西。
以下是我到目前为止尝试过的:
counter1 = 0;
counter2 = 0;
counter3 = 0;
while counter1==0 || counter2==0 || counter3==0
x = input('Please enter an x value > 0: ');
while x < 0
x = input('Invalid! Please enter another x value > 0: ');
end
if counter1>=1 || counter2>=1 || counter3>=1
disp('That case has been run already');
elseif x<=7
counter1 = counter1 + 1;
y = x.^3 + 3;
fprintf('Case 1: y = %d \n',y);
elseif 7<x && x<=12
counter2 = counter2 + 1;
y = (x-3)./2;
fprintf('Case 2: y = %d \n',y);
elseif x>12
counter3 = counter3 + 1;
y = 4.*x+3;
fprintf('Case 3: y = %d \n',y);
else counter1==1 && counter2==1 && counter3==1;
end
end
disp('All cases have been entered!')我现在唯一不能工作的就是这部分:
if counter1>=1 || counter2>=1 || counter3>=1
disp('That case has been run already');它似乎完全被忽视了。有什么建议吗?
发布于 2014-11-19 21:33:23
去掉所有的counter变量。使用boolean / logical标志来指示何时执行了特定的情况。此外,您还需要检查每个案例本身是否已经执行了特定的案例。不要将其作为单独的外部if语句执行。这可能就是你最初写的那句话行不通的原因。就这样做这样的事。我将把%//NEW放在我添加了新代码的地方:
case1 = false; %// NEW
case2 = false; %// NEW
case3 = false; %// NEW
while ~case1 || ~case2 || ~case3 %// NEW: While at least one of the cases has not been run...
x = input('Please enter an x value > 0: ');
while x < 0
x = input('Invalid! Please enter another x value > 0: ');
end
if x <= 7 %// NEW
if case1 %// NEW: Check if case #1 has already been run
%// If it has, show this to the user, then continue in the loop
fprintf('Case #1 has already been run!\n');
continue; %// NEW - Continue through the loop. Don't do anything else
end
case1 = true; %// NEW - Set to true if we haven't run this case already
y = x.^3 + 3;
fprintf('Case 1: y = %d \n',y);
elseif 7<x && x<=12
if case2 %// NEW - Repeat like Case #1 here
fprintf('Case #2 has already been run!\n'); %// NEW
continue; %// NEW
end
case2 = true; %// NEW
y = (x-3)./2;
fprintf('Case 2: y = %d \n',y);
elseif x>12
if case3 %// NEW - Repeat like Case #3 here
fprintf('Case #3 has already been run!\n'); %// NEW
continue; %// NEW
end
case3 = true; %// NEW
y = 4.*x+3;
fprintf('Case 3: y = %d \n',y);
end %// End if
end %// End while
disp('All cases have been entered!') %// Display once all cases have been entered下面是一个运行示例,说明它是有效的:
Please enter an x value > 0: -1
Invalid! Please enter another x value > 0: 3
Case 1: y = 30
Please enter an x value > 0: 2
Case #1 has already been run!
Please enter an x value > 0: 8
Case 2: y = 2.500000e+00
Please enter an x value > 0: 10
Case #2 has already been run!
Please enter an x value > 0: 14
Case 3: y = 59
All cases have been entered!我输入-1是为了看看它是否拒绝负数,这就是。我输入了一个数字< 7,是3,它成功地进入了第一个情况。我尝试输入另一个数字,即< 7,即2,它给出了这样的消息:第一种情况已经运行了。我试图输入一个介于7到12之间的数字.因此,我尝试8。它相应地生成案例#2。我用10再试一次,它说第二个案例已经运行了。最后,我尝试14,即> 12,它生成Case #3并停止,因为所有情况都已成功运行。
我相信这就是你要找的。
https://stackoverflow.com/questions/27027113
复制相似问题