Ms L
asked on
C# Change the instruction to user.
Currently I have coding that ask user to input the numbers like this .
I want to change a little bit the instruction to be like this
Please enter the numbers (separated by enter) :
Lot Qty
A 10
B 30
C 50
D 70
E 80
F 100
G 110
H 120
How can I do like that? The alphabet will automatically add until the user click " space". After user click space button, The other instruction will come out. Below is the coding:
I tried to add this in the coding but not successful.
I want to change a little bit the instruction to be like this
Please enter the numbers (separated by enter) :
Lot Qty
A 10
B 30
C 50
D 70
E 80
F 100
G 110
H 120
How can I do like that? The alphabet will automatically add until the user click " space". After user click space button, The other instruction will come out. Below is the coding:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
string input;
int NoDisplay;
decimal goal;
decimal element;
do
{
Console.WriteLine("Please enter the target:");
input = Console.ReadLine();
}
while (!decimal.TryParse(input, out goal));
Console.WriteLine("Please enter the numbers (separated by spaces)");
input = Console.ReadLine();
string[] elementsText = input.Split(' ');
List<decimal> elementsList = new List<decimal>();
foreach (string elementText in elementsText)
{
if (decimal.TryParse(elementText, out element))
{
elementsList.Add(element);
}
}
int i;
int j;
decimal tmp;
int MaxCnt = 0;
Boolean recordexist = false;
for (i = 0; i < elementsList.Count; i++)
{
for (j = i + 1; j < elementsList.Count; j++)
{
if (elementsList[i] < elementsList[j])
{
tmp = elementsList[i];
elementsList[i] = elementsList[j];
elementsList[j] = tmp;
}
}
}
Console.WriteLine("Please enter the maximum combination :");
NoDisplay = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The results :"); //the first result
Solver solver = new Solver();
List<List<decimal>> results = solver.Solve(goal, elementsList.ToArray());
List<resultList> ResultList = new List<resultList>();
recordexist = false;
foreach (List<decimal> result in results)
{
if (result.Count == NoDisplay)
{
recordexist = true;
decimal sum = 0;
foreach (decimal value in result)
{
sum = sum + value;
}
ResultList.Add(new resultList(result, sum));
}
}
List<resultList> SortedList = ResultList.OrderBy(o => o.sum).ToList();
if (recordexist == false)
{
Console.WriteLine("No record exist");
}
else
{
MaxCnt = SortedList.Count > 50 ? 50 : SortedList.Count;
for (int k = 0; k < MaxCnt; k++)
{
foreach (decimal value in (List<decimal>)SortedList[k].results)
Console.Write("{0}\t", value);
Console.WriteLine(" = {0}", SortedList[k].sum); //the minimum result line
}
}
Console.WriteLine("The final results :"); //the last result
List<resultList> minResultList = new List<resultList>();
decimal minSub = 100000; //to holding minimun total
List<decimal> minResult = new List<decimal>(); //to holding minimum Result
recordexist = false;
foreach (List<decimal> result in results)
{
if (result.Count == NoDisplay)
{
decimal subtract = 0;
decimal sum = 0;
recordexist = true;
foreach (decimal value in result)
{
sum = sum + value;
subtract = sum - goal;
}
if (subtract < minSub)
{
minSub = subtract;
minResult = null;
minResult = new List<decimal>();
foreach (decimal value in result)
{
minResult.Add(value);
}
minResultList.Add(new resultList(minResult, minSub));
}
}
}
SortedList = minResultList.OrderBy(o => o.sum).ToList();
if (recordexist == false)
{
Console.WriteLine("No record exist");
}
else
{
MaxCnt = SortedList.Count > 5 ? 5 : SortedList.Count;
for (int k = 0; k < MaxCnt; k++)
{
foreach (decimal value in (List<decimal>)SortedList[k].results)
Console.Write("{0}\t", value);
Console.WriteLine(" = {0}", SortedList[k].sum); //the minimum result line
}
}
Console.WriteLine("The minimum results is :"); //the minimum result line
MaxCnt = minResultList.Count > 1 ? minResultList.Count : 0;
if (MaxCnt > 0)
{
foreach (decimal value in (List<decimal>)minResultList[MaxCnt - 1].results)
Console.Write("{0}\t", value);
Console.WriteLine(" = {0}", minResultList[MaxCnt - 1].sum); //the minimum result line
}
else
{
Console.WriteLine("No record exist");
}
Console.ReadLine();
}
}
public class resultList
{
public List<decimal> results;
public decimal sum = 0;
public resultList(List<decimal> rst, decimal sub)
{
results = rst;
sum = sub;
}
}
I tried to add this in the coding but not successful.
int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
do
{
Console.WriteLine("Please enter the target:");
input = Console.ReadLine();
}
while (!decimal.TryParse(input, out goal));
Console.WriteLine("Please enter the numbers (separated by spaces)");
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
c = Convert.ToInt32(Console.ReadLine());
d = Convert.ToInt32(Console.ReadLine());
e = Convert.ToInt32(Console.ReadLine());
f = Convert.ToInt32(Console.ReadLine());
g = Convert.ToInt32(Console.ReadLine());
h = Convert.ToInt32(Console.ReadLine());
ASKER
Ryan Chong, do u mean like this?
Console.WriteLine("Please enter the numbers (separated by spaces)");
input = Console.ReadLine();
string[] elementsText = input.Split(' ');
List<decimal> elementsList = new List<decimal>();
do
{
input = Console.ReadLine();
//store the input
if (decimal.TryParse(input, out goal))
{
elementsList.Add(goal);
}
}
while (input != " ");
i got something like tihs (amended from your previous question)
see if this is what you need?
see if this is what you need?
string input;
int NoDisplay;
decimal goal;
decimal element;
do
{
Console.WriteLine("Please enter the target:");
input = Console.ReadLine();
}
while (!decimal.TryParse(input, out goal));
Console.WriteLine("Please enter the numbers (separated by entered)");
List<decimal> yourInputList = new List<decimal>();
do
{
input = Console.ReadLine();
//store the input
if (decimal.TryParse(input, out goal))
{
yourInputList.Add(goal);
}
}
while (input != " ");
//.... continue with the rest of your codes
yup, i think you can adapt it to use elementsList instead of yourInputList
ASKER
I already tried and the output be like this
I think that is not I mean. The alphabet like A,B,C,D will be display automatically and user just need to enter the qty that user want. It will go to other Alphabet if user click enter button. About the alphabet , I read this http://stackoverflow.com/questions/29004792/logic-to-generate-an-alphabetical-sequence-in-c-sharp?rq=1 but I dont think that is the way.
I think that is not I mean. The alphabet like A,B,C,D will be display automatically and user just need to enter the qty that user want. It will go to other Alphabet if user click enter button. About the alphabet , I read this http://stackoverflow.com/questions/29004792/logic-to-generate-an-alphabetical-sequence-in-c-sharp?rq=1 but I dont think that is the way.
The alphabet like A,B,C,D will be display automatically and user just need to enter the qty that user wanwhat if the user entered a non-numerical value?
The non-numerical value will not do the combintation. Do u mean like this?nope...
and based on this question, thought you wish to let the user to numbers by using "enter" key ? my another question is if you list the entries with alphabets, what if the values entered are non-numeric.
ASKER
thought you wish to let the user to numbers by using "enter" key ?
What I mean is, the first instruction will be like this
Please enter the numbers (separated by enter) :
Lot Qty
A
( at the qty , user will keyin the number ) then after user click enter it will be like this
B
after B appear , user will key-in others number at qty column. It will continue tell user to keyin the number until user click the space button. Then it will show like this
Please enter the maximum combination :
another question is if you list the entries with alphabets, what if the values entered are non-numeric.sorry, not understand what u mean.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Okay sorry my mistake. I will change this console app to win forms. Thanks btw
Open in new window