只是c#的新手寻找一些指导。
如果我使用双面积,在下面的代码中;它会给我错误:"使用未分配的局部变量区"。我不得不把double area = 0;
我的问题是为什么?为什么我必须为它赋值。我以前从来没有这样做过,所以对我来说有点混乱。
提前感谢您的回复。
'use strict';
let Wit = null;
let interactive = null;
try {
// if running from repo
Wit = require('../').Wit;
interactive = require('../').interactive;
} catch (e) {
Wit = require('node-wit').Wit;
interactive = require('node-wit').interactive;
}
const accessToken = (() => {
if (process.argv.length !== 3) {
console.log('usage: node examples/creditcardbalance.js <wit-access-token>');
process.exit(1);
}
return process.argv[2];
})();
// Quickstart example
// See https://wit.ai/ar7hur/quickstart
const firstEntityValue = (entities, entity) => {
const val = entities && entities[entity] &&
Array.isArray(entities[entity]) &&
entities[entity].length > 0 &&
entities[entity][0].value
;
if (!val) {
return null;
}
return typeof val === 'object' ? val.value : val;
};
const actions = {
send(request, response) {
const {sessionId, context, entities} = request;
const {text, quickreplies} = response;
return new Promise(function(resolve, reject) {
console.log('sending...', JSON.stringify(response));
return resolve();
});
},
getBalance({context, entities}) {
return new Promise(function(resolve, reject) {
var name = firstEntityValue(entities, "name");
var last4digit = firstEntityValue(entities, "Last4digits");
if (name && last4digit) {
context.name = name;
context.last4digit = last4digit;
context.balance = 'Rs.10000' + name + last4digit; // we should call a credit card API here
delete context.cardnumbermissing;
}
else {
context.cardnumbermissing = true;
context.name = name;
delete context.balance;
}
return resolve(context);
});
},
};
const client = new Wit({accessToken, actions});
interactive(client);
// JavaScript source code
答案 0 :(得分:4)
想象一下用户输入123
“请为Circle选择1,为Rectangle选择2,为Triangle选择3:
问题。在这种情况下,area
将不会被分配(不会执行case
)和
Console.WriteLine("\nThe area is {0}", area);
不知道输出什么
答案 1 :(得分:1)
如上所述,最好初始化变量以确保它具有值,并通过调用它而不分配任何值来避免可能的异常错误。另外,添加一个&#34; goto&#34;放置将允许您返回起点(虽然我宁愿您为此创建单独的方法)
int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle;
double area;
Console.Write("\n\n");
Console.Write("Calculating Area of Geometrical Shape\n");
Console.Write("=======================================\n");
Console.Write("\n\n");
Start:
Console.Write("Please select 1 for Circle, 2 for Rectangle and 3 for Triangle: ");
userValue = Convert.ToInt32(Console.ReadLine());
switch (userValue)
{
case 1:
Console.Write("Please Enter Radius of Circle: ");
rad = Convert.ToInt32(Console.ReadLine());
area = 3.14 * rad * rad;
break;
case 2:
Console.Write("Please enter Height of Rectangle: ");
heightOfRectangle = Convert.ToInt32(Console.ReadLine());
Console.Write("Please enter Width of Rectangle: ");
widthOfRectangle = Convert.ToInt32(Console.ReadLine());
area = widthOfRectangle * heightOfRectangle;
break;
case 3:
Console.Write("Please enter Base of Triangle: ");
baseOfTriangle = Convert.ToInt32(Console.ReadLine());
Console.Write("Please enter height of Triangle: ");
heightOfTriangle = Convert.ToInt32(Console.ReadLine());
area = .5 * baseOfTriangle * heightOfTriangle;
break;
default:
goto Start;
}
Console.WriteLine("\nThe area is {0}", area);
Console.Read();
答案 2 :(得分:0)
错误的原因是您的switch
声明中的非案例可能会发生 - 例如用户输入错误。
局部变量也没有用默认值初始化,因此如果不执行case语句,则area没有值Why compile error "Use of unassigned local variable"?