How to print my array after a string horizontally? - c#

There is my code:
static void Main(string[] args)
{
int i;
int[] numbers= new int[5];
for (i = 0; i < 5; i++)
{
Console.Write("Insert 5 numbers:");
numeros[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("\n");
for (i = 0; i < 5; i++)
{
Array.Sort(numeros);
Console.WriteLine("Ascendant numbers {0}",numbers[i]);
Array.Reverse(numbers);
Console.WriteLine("Descendant numbers {0}", numbers[i]);
}
Console.ReadLine();
}
So at this moment for each loop my app prints my string per item of my array, followed by the number.
What I want is, to print the string only once, followed by the complete array in a single line.

You can (1) Sort and reverse only once (2) Print the string outside the loop (3) Print only the digit inside loop (4) use Console.Write to print digits in the same line. Something like
Array.Sort(numeros);
Console.WriteLine("Numeros ingresados de forma ascendente :");
for (int i = 0; i < 5; i++)
{
Console.Write("{0} ", numeros[i]);
}
Array.Reverse(numeros);
Console.WriteLine(Environment.NewLine + "Numeros ordenados de forma descendente :");
for (int i = 0; i < 5; i++)
{
Console.Write("{0} ", numeros[i]);
}
N.B. I do not understand the language you are printing, so not sure the meaning remains same after code change.

Related

Why is my code not reading/printing forward, I am using loops to fill up arrays

using System.Collections.Generic;
int s = 0;
Console.WriteLine("How many soldiers: ");
s= Convert.ToInt32(Console.ReadLine());
string[] sol = new string [s];
Console.WriteLine("Enter names of "+s +"soldiers");
for (int i = 0; i < sol.Length; i++)
{
sol[i] = Console.ReadLine();
Console.ReadLine();
}
Array.Sort(sol);
Console.WriteLine("Names in order: ");
for (int i = 0; i < sol.Length; i++)
{
Console.WriteLine(sol[i]);
}
Console.WriteLine("it works");
I am able to input number of soldiers and also their names but after that I get nothing. Also, if I remove the console.readline() from the first for loop, the program just closes. I am new to programming.
What can I try next?
Without the extra Console.Readline() your code does in fact work. The problem, however, is that it closes so fast that you do not see the result. You therefore need to put a final Console.Readline() in, so that the program pauses, in order to give you the chance to see the results. Something like this:
int s = 0;
Console.WriteLine("How many soldiers: ");
s = Convert.ToInt32(Console.ReadLine());
string[] sol = new string[s];
Console.WriteLine($"Enter names of { s } soldiers");
for (int i = 0; i < sol.Length; i++)
{
sol[i] = Console.ReadLine();
}
Array.Sort(sol);
Console.WriteLine("Names in order: ");
for (int i = 0; i < sol.Length; i++)
{
Console.WriteLine(sol[i]);
}
Console.WriteLine("it works");
Console.WriteLine("Press enter to close");
Console.ReadLine();

Why Input string was not in a correct format and exception was unhandled

I am getting an error while taking array input from the user.
static void Main(string[] args)
{
int[] arrSum = new int[] { };
Console.WriteLine("Enter the array Size:\t");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter the array elements of {0} as Array Size:\n",n);
for (int i = 0; i < n; i++)
{
arrSum[i] = int.TryParse(Console.ReadLine(), out arrSum[]);
}
Console.WriteLine("Enter the number whose sum you want to find:\n");
int j = Convert.ToInt32(Console.ReadLine());
ArraySum(arrSum,n,j);
}
public static int ArraySum(int[] arr, int key, int n)
{
for (int i = 0; i < arr.Length; i++)
{
int first = arr[i];
for (int k = i+1; k < arr.Length; k++)
{
int second = arr[k];
while (first + second == key)
{
Console.WriteLine("The numbers whose sum is {0}" + key + "are:\n" + first + second);
}
if (first + second != key)
{
return -1;
}
else
{
return 1;
}
}
}
return 0;
}
To take array size and elements and the number whose sum we need to compare among the given array elements from the user as input and return the possible pairs whose sum is equal to the given number.
I am not sure if I met the same problem as you, but I modified your code as following. At first I created a safe console readline method for integer that there is no exception thrown if an invalid integer is entered:
private static int GetIntFromInput()
{
while (true)
{
string value = Console.ReadLine();
if (!int.TryParse(value, out int parsedInt))
{
Console.WriteLine("Invalid integer! Retry or Ctrl+C to abort program...");
continue;
}
return parsedInt;
}
}
Then I modified your first method as following:
static void Main(string[] args)
{
Console.WriteLine("Enter the array Size:\t");
int n = GetIntFromInput();
if (n <= 0)
{
Console.WriteLine("Array has to be at least of size 1...");
return;
}
Console.WriteLine("Enter the array elements of {0} as Array Size:\n", n);
var arrSum = new int[n];
for (int i = 0; i < n; i++)
{
int newInt = GetIntFromInput();
arrSum[i] = newInt;
}
Console.WriteLine("Enter the number whose sum you want to find:\n");
int j = Convert.ToInt32(Console.ReadLine());
ArraySum(arrSum, n, j);
}
With this my tests had been successful. Please note, that I did not replace the last Convert.ToInt32 for j.
As a note, please always verify user input as far as possible for not throwing exceptions. If anytime you will check anything not correctly it will crash sometime for sure...
have a great day!
I just have modified your array input code lines, pretty much straight forward. You can use int.TryParse as well just in case you wish to have a check
Console.WriteLine("Enter the array Size:\t");
int n = Convert.ToInt32(Console.ReadLine());
int[] arrSum = new int[n];
Console.WriteLine("Enter the array elements of {0} as Array Size:\n",n);
for(int i = 0;i<n;i++){
arrSum[i]= Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Enter the number whose sum you want to find:\n");
int j = Convert.ToInt32(Console.ReadLine());
ArraySum(arrSum,n,j);

Storing values in an array and outputting the highest,lowest,average. Output flaw

This was a small problem the teacher gave us at school. We were asked to make a program which keeps asking the user to input test scores until he inputs -99 to stop the program. The values are stored in an array and the highest, lowest and average scores are displayed.
The problem I have with my code is that whenever I run it it always gives me a value of 0 for lowest scores even though there are no zeros in the input. Can anyone please point out the mistake in my code?
Code:
static void Main(string[] args)
{
int[] za = new int[100];
scores(za, 0);
}
public static void scores(int[] ar, int x)
{
Console.Write("Please enter homework score [0 to 100] (-99 to exit): ");
int a = Convert.ToInt16(Console.ReadLine());
if (a != -99)
{
ar[x] = a;
x++;
scores(ar, x);
}
else
{
Console.Clear();
Console.WriteLine("Homework App");
int[] arr = new int[x];
foreach (int l in arr)
{
arr[l] = ar[l];
}
int lowest = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (lowest > arr[i]) { lowest = arr[i]; }
}
int highest = arr[0];
for (int j = 1; j < arr.Length; j++)
{
if (highest < arr[j]) { highest = arr[j]; }
}
double sum = 0;
double nums = 0;
for (int k = 0; k < arr.Length; k++)
{
sum = sum + arr[k];
nums++;
}
double average = sum / nums;
Console.WriteLine("Highest Score: {0}", highest);
Console.WriteLine("Lowest Score: {0}", lowest);
Console.WriteLine("Average Score: {0}", average);
Console.ReadLine();
}
}
When you're copying items, don't use a foreach loop and then the element stored in the array as the index that you're inserting to. Instead, use a for loop with a counter variable.
You should change this:
int[] arr = new int[x];
foreach (int l in arr)
{
// You're using the wrong value for the index here.
// l represents the value of the item stored in `arr`, which is `0`
arr[l] = ar[l];
}
To this:
int[] arr = new int[x];
for (var counter = 0; counter < x; counter++)
{
arr[counter] = ar[counter];
}

Getting an error about variable not existing in current context

I have written out a program that declares an array of 10 integers, takes input from the user and puts them in the array and then accepts out parameters for the highest value, lowest value, sum of all values, and the average.
The main method displays all the stats. I don't know why, but I get the error
k does not exist in the current context - line 51 column 5
when I have previously declared it before that given line. Any help would be appreciated.
using System;
namespace IntegerStatistics
{
class Program
{
static void Main()
{
Console.Clear();
// Declaring variables
int[] userArray = FillArray();
int ArrayHighest = 0;
int ArrayLowest = 0;
int ArraySum = 0;
int ArrayAverage = 0;
Calculations(userArray, out ArrayHighest, out ArrayLowest, out ArraySum, out ArrayAverage);
Console.WriteLine("The lowest value in the array is {0}, while the highest is {1}.", ArrayLowest, ArrayHighest);
Console.WriteLine("The array has a sum of {0} and averages out to {1}.", ArraySum, ArrayAverage);
Console.ReadLine();
}
private static int[] FillArray()
{
int[] intArray = new int[10];
int numbersEntered = 0;
int intTemp = 0;
string strTemp = "";
for(int k = 0; k < 10; ++k)
{
Console.WriteLine("Enter a whole number or 999 to quit: ");
strTemp = Console.ReadLine();
while(!int.TryParse(strTemp, out intTemp))
{
Console.WriteLine("Input was not in the correct format");
Console.Write("Please enter a valid number: ");
strTemp = Console.ReadLine();
}
}
if(intTemp != 999)
{
intArray[k] = intTemp;
++numbersEntered;
}
else
{
k = 10;
}
Array.Resize(ref intArray, numbersEntered);
return intArray;
}
private static void Calculations(int[] intArray, out int Highest, out int Lowest, out int intSum, out int average)
{
intSum = 0;
Array.Sort(intArray);
Lowest = intArray[0];
Array.Reverse(intArray);
Highest = intArray[0];
Array.Reverse(intArray);
for(int k = 0; k < intArray.Length; ++k)
{
intSum += intArray[k];
}
average = intSum / intArray.Length;
}
}
}
The line I'm specifically having issues with is:
if (intTemp != 999)
{
intArray[k] = intTemp;
++numbersEntered;
}
else
{
k = 10;
}
I think you meant to place the if-else block inside the for-loop.
Since you want to check if the input number is 999 for each iteration, you could write your for-loop like this:
for(int k = 0; k < 10; ++k)
{
Console.WriteLine("Enter a whole number or 999 to quit: ");
strTemp = Console.ReadLine();
while(!int.TryParse(strTemp, out intTemp))
{
Console.WriteLine("Input was not in the correct format");
Console.Write("Please enter a valid number: ");
strTemp = Console.ReadLine();
}
if(intTemp != 999)
{
intArray[k] = intTemp;
++numbersEntered;
}
else
{
k = 10;
}
}
The loop variable k goes out of scope when the code leaves the for loop. So, you can use variable k only within the loop.
So, you need to move your if-else inside your for loop. Change your FillArray() method to
private static int[] FillArray()
{
int[] intArray = new int[10];
int numbersEntered = 0;
int intTemp = 0;
string strTemp = "";
for (int k = 0; k < 10; ++k)
{
Console.WriteLine("Enter a whole number or 999 to quit: ");
strTemp = Console.ReadLine();
while (!int.TryParse(strTemp, out intTemp))
{
Console.WriteLine("Input was not in the correct format");
Console.Write("Please enter a valid number: ");
strTemp = Console.ReadLine();
}
if (intTemp != 999)
{
intArray[k] = intTemp;
++numbersEntered;
}
else
break;
}
Array.Resize(ref intArray, numbersEntered);
return intArray;
}
Also, I'd suggest changing ArrayAverage to double type. e.g. 2, 3 => average 2.5
double ArrayAverage = 0; //average need not be whole number
Additionally, with Linq you can shorten your Calculations method as
//using System.Linq;
private static void Calculations(int[] intArray, out int Highest, out int Lowest, out int intSum, out double average)
{
Lowest = intArray.Min();
Highest = intArray.Max();
intSum = intArray.Sum();
average = intArray.Average();
}

Computing sum for an array outside *newb*

I've figured out how to do most of what I need. I realize that the variables used in the for loops will not be reachable outside of the loop, but I need to display the sum of the integers the user puts in. So,
step 1: Asks user for input of number of integers.
Step 2: Runs through getting each integer.
Step 3: Then displays all input.
And step 4: should have the sum of step 3...and that's
where my issue is.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Dynamic_Entry
{
class Program
{
static void Main()
{
Console.Write("How many integers are in your list? ");
int k = Convert.ToInt32(Console.ReadLine());
int[] a = new int[k];
int sum = 0;
for (int i = 0; i < a.Length; i++)
{
Console.Write("Please enter an integer: ");
a[i] = Convert.ToInt32(Console.ReadLine());
}
for (int n = 0; n < a.Length; n++)
{
Console.WriteLine("{0, 5}", a[n]);
}
Console.WriteLine("-----");
sum += [] a;
Console.Write("{0, 5}", sum);
Console.ReadLine();
}
}
}
Any help on how to get the sum from outside the loop? If I put the hyphen line inside the last loop, it'll keep putting lines after every number...I only need the line at the end, with the sum under it. Thanks!
Since you can used linq, replace the sum with bellow
Console.WriteLine("-----");
sum = a.Sum();
Console.Write("{0, 5}", sum);
You may use
a.Sum()
method of Linq.
And your code should look like following
static void Main()
{
Console.Write("How many integers are in your list? ");
int k = Convert.ToInt32(Console.ReadLine());
int[] a = new int[k];
int sum = 0;
for (int i = 0; i < a.Length; i++)
{
Console.Write("Please enter an integer: ");
a[i] = Convert.ToInt32(Console.ReadLine());
}
for (int n = 0; n < a.Length; n++)
{
Console.WriteLine("{0, 5}", a[n]);
}
Console.WriteLine("-----");
Console.Write("{0, 5}", a.Sum());
Console.ReadLine();
}

Categories

Resources