0

さて、私は for ループを利用し、一度に 1 つずつユーザー入力を配列に追加する単純なプログラムを作成しようとしています。これはこれを使用します

string []str = new string[10];
for (int i = 0; i < str.Length; i++)
{
     Console.WriteLine("Please enter a number: ");
     str[i] = Console.ReadLine();
}

しかし、foreach ステートメントを使用して配列をループしようとすると、string[] を String 型に暗黙的に変換できないというエラーが表示されます。foreach ステートメントは次のとおりです。

int even=0; int odd=0;

int[] Arr=new string [] {str};

foreach (int i in Arr)
{
    if (i % 2 == 0)
    {
        even++;
    }
    else
    {
        odd++;
    }
}

そして、ここに完全なソースがあります、

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = new string[10];
            for (int i = 0; i < str.Length; i++)
            {
                Console.WriteLine("Please enter a number: ");
                str[i] = Console.ReadLine();
            }
            int even = 0; int odd = 0;
            int[] Arr = new string[] { str };
            foreach (int i in Arr)
            {
                if (i % 2 == 0)
                {
                    even++;
                }
                else
                {
                    odd++;
                }
            }
            Console.WriteLine("There is " + even + " even numbers.");
            Console.WriteLine("There is " + odd + " odd numbers");
            Console.ReadLine();
            Console.ReadLine();
        }
    }
}
4

2 に答える 2

2

入力コードを変更して、ユーザー入力を文字列ではなく整数の配列に直接保存します

    int i = 0;
    int[]values = new int[10];
    while(i < values.Length)
    {
        Console.WriteLine("Please enter a number: ");
        int result;
        string input = Console.ReadLine();
        if(Int32.TryParse(input, out result)
        {
            values[i] = result;
            i++;
        }
        else
        { 
            Console.WriteLine("Not a valid integer");
        }
    }

int[] Arr=new string [] {str};これにより、この行で文字列の配列から整数の配列を初期化しようとして、コンパイラが満足できない場合のエラーが回避されます。

明らかなコンパイル エラーとは別に、Int32.TryParseを使用すると、ユーザーが整数以外の何かを入力したかどうかをすぐに確認でき、入力を拒否できます。

于 2013-10-20T20:34:46.657 に答える