public class dailyMenu
{
private string day="";
private int date = 0;
private static int nextDate=1;
private string entree ="";
private double price;
private double calories;
private static string [] daysOfWeek= {"Monday","Tuesday","Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"};
private static string[] entrees = {"Beef Tenderloin Fresco",
"Madagascar Filet Mignon", "Filet Mignon", " Lobster Ravioli",
"Asian Infused Braised Beef", "New Age Chicken Cordon Bleu",
"Short Ribs", " Beef Wellington","Fajitas", "Bacon Cheeseburger",
"Beef Burgandy", "Spagehetti"};
private static double [] entreePrices= { 5.99,7.99,6.99,4.50,9.99,10.29,
5.67,8.99, 3.99,4.78,10,79,6.98};
private static int[] entreeMealCaloricVal= { 999,1288,770,699,450,999,1500,873, 911,
1011, 777,500};
public dailyMenu()
{
assignDate();
GetDay();
RandPopulate();
}
void assignDate()
{
date = nextDate;
nextDate++;
if (GetDay()== "Friday")
{
nextDate += 2;
}
}
void RandPopulate()
{
Random random = new Random();
int randomNumber = random.Next(0,13);
entree = entrees [randomNumber];
price = entreePrices [randomNumber];
calories = entreeMealCaloricVal [randomNumber];
}
}
The IDE is telling me that line 56, 41, and 14 could be the problem so I'm guessing it has something to do with my random number generator.
Can someone give me a hand?
looks like entrees and entreeMealCaloricVal contain 12 items. That means they'll be indexed from 0 to 11.
Using random.Next(0,13) will generate a number from 0 to 12. When you try to access those arrays at index 12, your exception gets thrown.
Related
I was trying to make a .NET grade form using C# and the issue that I am having is that the average that I am getting is wrong. Even though I tried to calculate the total in many different loops it just does not get the sum correct. Sometime it is too high sometimes it is too low. When I tried calculating the total marks in the validation loop it shows some weird sum of high value and when I tried to calculate the total in calculate function the sum comes out too low. Please help!
namespace SemesterGradesForm
{
public partial class formSemesterGrades : Form
{
TextBox[] inputTextBoxes;
TextBox[] outputTextBoxes;
double totalMarks;
public formSemesterGrades()
{
InitializeComponent();
inputTextBoxes = new TextBox[] { textBoxCourse1Marks, textBoxCourse2Marks, textBoxCourse3Marks, textBoxCourse4Marks, textBoxCourse5Marks, textBoxCourse6Marks, textBoxCourse7Marks };
outputTextBoxes = new TextBox[] { textBoxCourse1LetterGrade, textBoxCourse2LetterGrade, textBoxCourse3LetterGrade, textBoxCourse4LetterGrade, textBoxCourse5LetterGrade, textBoxCourse6LetterGrade, textBoxCourse7LetterGrade };
}
/// <summary>
/// Compare a given numeric grade value to an array of grades to determine a letter representing that grade.
/// </summary>
/// <param name="numericGrade"> A grde between 0 and 100</param>
/// <returns>Letter grade as a short string</returns>
private string GetLetterGrade(double numericGrade)
{
// Declare arrays for the grade values and letter values that corresponds.
double[] gradeValues = { 0D, 50D, 52D, 58D, 60D, 62D, 68D, 70D, 72D, 78D, 80D, 82D, 90D };
string[] gradeLetters = { "F", "D-", "D", "D+", "C-", "C", "C+", "B-", "B", "B+", "A-", "A", "A+" };
// Default the return letter to F
string returnLetter = "F";
// Count through the array comparing grades to the input grade.
for (int counter = 0; counter < gradeValues.Length; counter++)
{
// if the niput grade is bigger than the value in the array, assign the letter grade.
if (numericGrade > gradeValues[counter])
{
returnLetter = gradeLetters[counter];
}
// If the input grade is not bigger than the value in the arraym return the last assigned letter grade
else
{
return returnLetter;
}
}
return returnLetter;
}
/// <summary>
/// Check if a passed TexBox is a numeric grade between 0 and 100
/// </summary>
/// <param name="boxToCheck"> A textbox to check for a valid numeric grade value</param>
/// <returns> true if valid </returns>
private bool IsTextBoxValid(TextBox boxToCheck)
{
const double MinimumGrade = 0.0;
const double MaximumGrade = 100.0;
double gradeValue = 0;
if (double.TryParse(boxToCheck.Text, out gradeValue))
{
if (gradeValue >= MinimumGrade && gradeValue <= MaximumGrade)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// Clears fields and sets the form to its default state
/// </summary>
private void SetDefaults()
{
// Clear All input controls.
ClearControls(inputTextBoxes);
//Clear all output controls.
ClearControls(outputTextBoxes);
textBoxSemesterMarks.Clear();
textBoxSemesterLetterGrade.Clear();
textBoxOutput.Clear();
// Reset variable
totalMarks = 0;
//Set focus in some useful way
textBoxCourse1Marks.Focus();
// Re-enable controls
buttonCalculate.Enabled = true;
SetControlsEnabled(inputTextBoxes, true);
}
/// <summary>
/// Mass clears the text boxes
/// </summary>
/// <param name="controlArray">An array of controls with a text property to clear</param>
private void ClearControls(Control[] controlArray)
{
foreach (Control controlToClear in controlArray)
{
controlToClear.Text = String.Empty;
}
}
/// <summary>
/// TODO: You should comment this - what does it do?
/// </summary>
/// <param name="controlArray">An array of controls to enable or disable</param>
/// <param name="enabledStatus">true to enable, false to disable</param>
private void SetControlsEnabled(Control[] controlArray, bool enabledStatus)
{
foreach (Control controlToSet in controlArray)
{
controlToSet.Enabled = enabledStatus;
}
}
/// <summary>
/// When youn leave one of the textboxes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LeaveInputTextbox (object sender, EventArgs e)
{
// Count through all of the textboxes.
for( int inputCounter = 0; inputCounter < inputTextBoxes.Length; inputCounter++ )
{
// Determine if the textbox's contents are valid.
if (IsTextBoxValid(inputTextBoxes[inputCounter]))
{
double grade;
// Get the letter grade from this textbox
grade = double.Parse(inputTextBoxes[inputCounter].Text);
// Assign this letter grade to the corresponding label.
outputTextBoxes[inputCounter].Text = GetLetterGrade(grade);
}
}
}
private void formSemesterGrades_Load(object sender, EventArgs e)
{
}
private void buttonReset_Click(object sender, EventArgs e)
{
SetDefaults();
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
double averageMarks = 0;
int invalidBox = 0;
int validBox = 0;
for (int inputCounter = 0; inputCounter < inputTextBoxes.Length; inputCounter++)
{
if (IsTextBoxValid(inputTextBoxes[inputCounter]))
{
totalMarks += double.Parse(inputTextBoxes[inputCounter].Text);
// Increase counter
inputCounter++;
// If the textbox is valid, count it. If not, just don't.
validBox++;
}
else
{
// If the box is not blank, increment the number of invalid boxes by one.
if(String.IsNullOrEmpty(inputTextBoxes[inputCounter].Text) == false)
{
// Focus on invalid input
inputTextBoxes[inputCounter].Focus();
textBoxOutput.Text = "Please enter VALID Values!";
// Increase invalid counter
invalidBox++;
}
}
}
// If number of valid boxes == 1 && number of invalid boxes == 0
if (validBox >= 1 && invalidBox == 0)
{
// Calculate and output the average
averageMarks = Math.Round(totalMarks / inputTextBoxes.Length, 2);
// Display the Average marks and grade
textBoxSemesterMarks.Text = averageMarks.ToString();
// Assign this letter grade to the corresponding label.
double grade;
grade = double.Parse(textBoxSemesterMarks.Text);
textBoxSemesterLetterGrade.Text = GetLetterGrade(grade);
// Disable input controls until the form is reset.
buttonCalculate.Enabled = false;
SetControlsEnabled(inputTextBoxes, false);
buttonReset.Focus();
}
else
{
textBoxOutput.Text = "Please enter VALID Values!";
}
}
private void buttonExit_Click(object sender, EventArgs e)
{
Close();
}
}
}
I think you have posted too much code, as the question pertains to the calculation of the class average grade.
Fundamentally, you are storing the grades as strings inside UI elements (such as text boxes) and therefore cannot directly interact with the data unless you keep converting from strings to values all the time.
I suggest you create a C# object (a class) to store the class grades named Class and have it handle all the logic. In this case, you can use the built-in .Average() method as part of System.Linq which returns the average of any collection of numbers.
In my example below I produces the following output:
Class: Art I
---
Student Score Grade
Alex 48 F
Beatrice 56 D
Claire 65 C
Dennis 78 B+
Eugene 82 A
Forest 88 A
Gwen 98 A+
---
Average 73.6 B
from the following sample code:
static void Main(string[] args)
{
var art = new Class("Art I",
"Alex", "Beatrice", "Claire",
"Dennis", "Eugene", "Forest",
"Gwen");
art.SetGrade("Alex", 48m);
art.SetGrade("Beatrice", 56m);
art.SetGrade("Claire", 65m);
art.SetGrade("Dennis", 78m);
art.SetGrade("Eugene", 82m);
art.SetGrade("Forest", 88m);
art.SetGrade("Gwen", 98m);
Console.WriteLine($"Class: {art.Title}");
Console.WriteLine("---");
Console.WriteLine($"{"Student",12} {"Score",8} {"Grade",8}");
foreach (var grade in art.Grades)
{
Console.WriteLine($"{grade.Key,12} {grade.Value,8} {Class.GetLetterGrade(grade.Value),8}");
}
Console.WriteLine("---");
Console.WriteLine($"{"Average",12} {art.AverageScore,8} {Class.GetLetterGrade(art.AveragScore),8}");
}
The key here is the methods Class.AverageScore and the letter scores which depend on the static function Class.GetLetterGrade().
The actual logic is handled by the Class object defined as
public class Class
{
public Class(string title, params string[] students)
{
Title = title;
grades = new Dictionary<string, decimal>();
foreach (var student in students)
{
grades[student] = 0m;
}
}
public string Title { get; }
public IReadOnlyCollection<string> Students { get => grades.Keys.ToList(); }
public void SetGrade(string student, decimal score)
{
if (grades.ContainsKey(student))
{
this.grades[student] = score;
}
else
{
throw new ArgumentException("Student not found", nameof(student));
}
}
readonly Dictionary<string, decimal> grades;
public IReadOnlyDictionary<string, decimal> Grades { get => grades; }
public decimal AverageScore { get => Math.Round(grades.Values.Average(),1); }
#region Grading
// Declare arrays for the grade values and letter values that corresponds.
static readonly decimal[] gradeValues = { 0, 50, 52, 58, 60, 62, 68, 70, 72, 78, 80, 82, 90 };
static readonly string[] gradeLetters = { "F", "D-", "D", "D+", "C-", "C", "C+", "B-", "B", "B+", "A-", "A", "A+" };
public static string GetLetterGrade(decimal score)
{
// use rounding rules
score = Math.Round(score, 0, MidpointRounding.AwayFromZero);
if (score > 100m) { score = 100m; } // max 100
int index = Array.IndexOf(gradeValues, gradeValues.LastOrDefault((x) => score >= x));
if (index < 0) { index = 0; } // default "F"
return gradeLetters[index];
}
public static decimal GetScoreFromLetter(string grade)
{
int index = Array.IndexOf(gradeLetters, grade);
if (index <= 0) { index = 0; } // default "0"
return gradeValues[index];
}
#endregion
}
Notice that I chose to use decimal to score grades instead of double as the nature of double makes it harder for comparisons and display. This avoids results like 84.9999999999997 instead of 85.0.
I'm trying to get the Sum() of a List<> depending on the string[] of an array. I tried the following method:
private static List<int> sum = new List<int>();
private static int total = 0;
private static string[] ErrorCode = new string[] {"#", "-2", "!"};
private static void Score(string[] ErrorCode)
{
if (ErrorCode.Contains("#"))
{
sum.Add(1);
}
if (ErrorCode.Contains("-2"))
{
sum.Add(-2);
}
if (ErrorCode.Contains("!"))
{
sum.Clear();
sum.Add(5);
}
total = sum.Sum();
//This prints total = 5
}
However, if the array is ordered a different way like:
private static string[] ErrorCode = new string[] {"!", "-2", "#"};
private static void Score(string[] ErrorCode)
{
if (ErrorCode.Contains("#"))
{
sum.Add(1);
}
if (ErrorCode.Contains("-2"))
{
sum.Add(-2);
}
if (ErrorCode.Contains("!"))
{
sum.Clear();
sum.Add(5);
}
total = sum.Sum();
//This prints total = 5
//but should print total = 4 (because of the order of the array)
}
How can I achieve a result that dynamically prints either value? So, it would depend on how the array was entered with the ErrorCode and not on the Score method if statements.
Thanks a lot for the help!
Don't use Contains when order matters, process each command in order:
private static void Score(string[] ErrorCode) {
total = 0;
foreach (var ec in ErrorCode) {
switch (ec) {
case "#":
total += 1;
break;
case "-2":
total += -2;
break;
case "!":
total = 5;
break;
}
}
}
You should also have Score use a local variable (sum?) and return the result when done. You should name ErrorCode as errorCodes as it contains multiple codes, so:
private static int Score(string[] errorCodes) {
var sum = 0;
foreach (var ec in errorCodes) {
switch (ec) {
case "#":
sum += 1;
break;
case "-2":
sum += -2;
break;
case "!":
sum = 5;
break;
}
}
return sum;
}
total = Score(ErrorCodes);
Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 6 years ago.
Improve this question
Here is my code thus far; my main problem is in the main method.
namespace Lab
{
class dailyMenu
{
public static int r;
public string day;
public int date;
public string entree;
public double price;
public int calories;
public static int assignDate = 1;
public string Day
{
get { return day; }
set { day = value; }
}
public int Date
{
get { return date; }
set { date = value; }
}
public string Entree
{
get { return entree; }
set { entree = value; }
}
public double Price
{
get { return price; }
set { price = value; }
}
public int Calories
{
get { return calories; }
set { calories = value; }
}
private static string[] DayArray = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" , "Saturday" , "Sunday" };
private static string[] EntreeArray = { "Pizza", "Spaghetti", "Cheeseburger", "Salad", "Soup", "Sandwich", "Pork", "Roast Chicken", "Kebab", "Steak", "Tacos", "Risotto" };
private static double[] PriceArray = { 2.50, 4.00, 1.50, 1.50, 1.50, 3.00, 3.50, 3.00, 2.50, 4.00, 3.00, 2.00 };
private static int[] CalorieArray = { 300, 600, 650, 270, 190, 680, 250, 300, 180, 250, 350, 600 };
public static void DayofMonth(int date)
{
date = assignDate;
assignDate++;
if (date == 5 || date == 12 || date == 19 || date == 26)
{
assignDate += 2;
}//end if
}// end DateofMonth
public static void DayofWeek (int day)
{
day = (day % 7) - 1;
}// end DayofWeek
public void randomItem()
{
Random rnd = new Random();
r = rnd.Next(0, 12);
this.entree = EntreeArray[r];
this.calories = CalorieArray[r];
this.price= PriceArray[r];
}// end randomItem
public dailyMenu()
{
randomItem();
}
static void Main(string[] args)
{
// Populates the 2D array
dailyMenu [,] day = new dailyMenu [4, 5];
for (int row = 0; row < 4; row ++)
{
for (int column = 0; column < 5; column++)
{
day[row, column] = new dailyMenu();
for (int i; r < Length.day; i++)
{
Console.WriteLine(r);
}
}//end forloop column
}// end forloop row
}//end Main
}//end dailyMenu
}//end namespace
I am trying to print out a new instance of DailyMenu with the three arrays using a for loop in Main, however the error message I'm getting is "The name Length does not exist in the current context."
Any help, please? Thanks.
You need to use day.Length not Length.day. day is your variable -- an array -- and it has a Length property.
One of the biggest problem I see with your code has to do with correctly naming your variables. Your class has a String property named 'day', you also declare a dailyMenu variable named 'day' in your main function and you also have an int parameter named 'day' in the DayOfWeek function. Talk about not helping with confusion. Name your things properly and you will have less problems.
public static void GetSales(string monthArray, double monthlySales )
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine("Please enter Monthly Sales for {0}", monthArray[i]);
monthlySales[i] = Convert.ToDouble(Console.ReadLine());
}
}
static void Main(string[] args)
{
string[] monthArray =new string[12] {"January", "FEBRUARY","March","April","May","June","July","August","September","October","Novemember","December"};
double[] monthlySales= new double[12];
GetSales(monthArray[0],monthlySales[0]);
Console.ReadLine();
}
I'n not sure why i'm getting this error in the GetSales method for the double monthlySales[] Any help would be great Thanks.
You are passing a double to your GetSales method instead of the array and as such there is nothing to index. You should pass the entire array.
GetSales(monthArray[0], monthlySales);
public static void GetSales(string monthArray, double[] monthlySales )
You've become confused with the way arrays work.
You're passing this: string monthArray, double monthlySales, but inside your method, you're treating them as arrays. monthArray[i] happens to work, because a string just so happens to be a collection of chars, so monthArray[0] is really returning the first letter of the month, not the first month.
Try this:
public static void GetSales(string[] monthArray, double[] monthlySales )
// ^^ changed here ^^
{
for (int i = 0; i < 12; i++)
{
Console.WriteLine("Please enter Monthly Sales for {0}", monthArray[i]);
monthlySales[i] = Convert.ToDouble(Console.ReadLine());
}
}
static void Main(string[] args)
{
string[] monthArray =new string[12] {"January", "FEBRUARY","March","April","May","June","July","August","September","October","Novemember","December"};
double[] monthlySales= new double[12];
GetSales(monthArray, monthlySales);
// ^^ changed here ^^
Console.ReadLine();
}//main
I am trying to learn C# and doing some questions i googeld. This is the task to do:
*"Beginner level:
The task is to make
a dice game where the user throws 3
Each 12-sided dice (numbers
shall be randomly selected and stored in an array / field or list).
Add up the total of the dice and show on the screen.
Create a function / method that accepts a figure
(the total sum of the dice). Function / method
should return the text "Good throw" if the figure
is higher or equal to 20.
In all other cases, the text
"Sorry" is returned.
Call the function / method in the main method
and prints the total and the text.
Advanced level:
This is an extension of the task where you must use a class to simulate a dice. The user shall have the option of writing a x y-sided dice himself.
If the total sum of a roll of the dice generates a score that is> 50% of the maximum score, the words "good throw" is displayed.
This logic can be in your main method.
Create the class described in the class diagram and use appropriate
way in your code."*
The thing is that i cant get it to work, the array in my class do not save my numbers im typing in... I only get the reslut 0. I think i have just done some big misstake i cant see...
This is the Main code:
static void Main(string[] args)
{
List<Dice> _Dice = new List<Dice>();
int a = 0;
int times = int.Parse(Interaction.InputBox("Write how many times you want to repeat the game:"));
while (a != times)
{
int antThrow = int.Parse(Interaction.InputBox("Write how many times you want each dice to get thrown:"));
int xChoice = int.Parse(Interaction.InputBox("Write how many dice you want to throw:"));
int yChoice = int.Parse(Interaction.InputBox("Write how many sides you want each dice should have:"));
_Dice.Add(new Dice(xChoice,yChoice, antThrow));
a++;
}
int e = 1;
foreach (var item in _Dice)
{
Interaction.MsgBox(string.Format("Result of game {0}: {1}", e++, item.Tostring()));
}
}
This is the Dice class:
class Dice
{
static int _xChoice, _yChoice, _throw;
static List<int> sum = new List<int>();
static int w = 0;
static int _sum;
static int[,] dice = new int[_xChoice, _yChoice];
public string Tostring()
{
int half = _sum / 2;
if (half <= _sum/2)
{
return "Good throw!" + _sum;
}
else
{
return "Bad throw!";
}
}
void random()
{
Random rnd = new Random();
while (w != _throw)
{
for (int i = 0; i < dice.GetLength(0); i++)
{
for (int j = 0; j < dice.GetLength(1); j++)
{
dice[i, j] = rnd.Next(1, _yChoice);
_sum += dice[j, i];
sum.Add(_sum);
}
}
w++;
}
}
public Tarning(int Xchoice, int Ychoice, int throw)
{
_throw = thorw;
_xChoice = Xchoice;
_yChoice = Ychoice;
}
}
Your main problem is in the static keyword. Static field means that there's only
one field for all the instances, which is not your case: you need each instance of Dice has its own fields' values.
class Dice {
// no static here
private int _xChoice, _yChoice, _throw;
// no static here
private List<int> sum = new List<int>();
// no static here
private int w = 0;
// no static here
private int _sum;
// no static here
private int[,] dice = new int[_xChoice, _yChoice];
// BUT, you want a random generator for all the instances, that's why "static"
private static Random rnd = new Random();
// When overriding method mark it with "override"
// And Be Careful with CAPitalization:
// the method's name "ToString" not Tostring
public override string ToString() {
...
}
void random() {
// Do not create Random generator each time you call it:
// It makes the random sequences skewed badly!
// Istead use one generator for all the calls, see the code above
// private static Random rnd = new Random();
// Random rnd = new Random();
...
}
...
class Program
{
static void Main(string[] args)
{
var dice = new List<DiceLogic>();
int a = 0;
int times = GetTimes();
while (a != times)
{
int antThrow = GetAntThrow();
int xChoice = GetXChoice();
int yChoice = GetYChoice();
dice.Add(new DiceLogic(xChoice, yChoice, antThrow));
a++;
}
int e = 1;
foreach (var item in dice)
{
Console.WriteLine("Result of game {0}: {1}", e++, item.Tostring());
}
Console.ReadLine();
}
private static int GetTimes()
{
while (true)
{
Console.WriteLine("Write how many times you want to repeat the game:");
int times;
var result = int.TryParse(Console.ReadLine(), out times);
if (result) return times;
Console.WriteLine("Value must be a number.");
}
}
private static int GetAntThrow()
{
while (true)
{
Console.WriteLine("Write how many times you want each dice to get thrown:");
int antThrow;
var result = int.TryParse(Console.ReadLine(), out antThrow);
if (result) return antThrow;
Console.WriteLine("Value must be a number.");
}
}
private static int GetXChoice()
{
while (true)
{
Console.WriteLine("Write how many dice you want to throw:");
int getXChoice;
var result = int.TryParse(Console.ReadLine(), out getXChoice);
if (result) return getXChoice;
Console.WriteLine("Value must be a number.");
}
}
private static int GetYChoice()
{
while (true)
{
Console.WriteLine("Write how many sides you want each dice should have:");
int getXChoice;
var result = int.TryParse(Console.ReadLine(), out getXChoice);
if (result) return getXChoice;
Console.WriteLine("Value must be a number.");
}
}
}
public class DiceLogic
{
public string Tostring()
{
int maxScore = _diceSides*_dices;
if (_result >= maxScore / 2)
{
return "Good throw! " + _result;
}
return "Bad throw! " + _result;
}
private readonly int _dices;
private readonly int _diceSides;
private readonly int _throwDice;
private int _result;
private void CalculateResult()
{
var rnd = new Random();
for (int i = 0; i < _dices; i++)
{
int currentResult = 0;
for (int j = 0; j < _throwDice; j++)
{
currentResult = rnd.Next(0, _diceSides);
}
_result += currentResult;
}
}
public DiceLogic(int dices, int diceSides, int throwEachDice)
{
_dices = dices;
_diceSides = diceSides;
_throwDice = throwEachDice;
CalculateResult();
}
}
This is an example of how you could implement what they are asking, go through te code line by line with the debugger so you understand what is going on.
You never call the method random(). Therefore, the value of your member variable _sum is never changed and remains 0. You need to call the method random() somewhere. You should probably make it public and call it from your main method after you have set up all your dice.
Furthermore, your member variables in the Dice class are all static! That means that the different Dice instances will all share the same values. I think this is not intended. You should make the variables instance variables by removing the static modifier.
Your method Tarning is not called and it takes a reserved word “throw” [I believe it was supposed to be thorw]. The method is not void so it must return a type.
Random() is not invoked and does display anything.
Dice has not constructor that has 3 arguments within its braces but it’s declared as _Dice.Add(new Dice(xChoice,yChoice, antThrow));