Wątek przeniesiony 2018-02-07 19:36 z C# i .NET przez somekind.

tablica z liczbami po przecinku

0

Witam,
Jestem totalnie zielony w programowaniu, niestety muszę coś wystukać prosty program. Ostatni raz z C# mialem styczność jakieś 5 lat temu i wszelka wiedza (choć i tak była niewielka) wyparowała. Problem zapewne błachy, ale nie mam pojęcia jak go przeskoczyć.
Potrzebuję wypełnić tablicę 2 wymiarową liczbami z pewnego zakresu, liczby również po przecinku i jest zgrzyt.


            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                   System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();
                int[,] tab1 = new int[10, 10];                
                Random rand = new Random(20);
           
                for (int i = 0.0; i < 10; i++ )
                {
                    for (int n = 0.0; n < 10; n++)
                    {
                        tab1[i, n] = rand.Next(1,10);
  
                    }
                }
            }

Dla pełnych liczb działa to co wyżej (a przynajmniej się kompiluje...). Nie mam jednak pojęcia co zrobić aby uzyskać np wartości 1,3; 1,4 itp.Zmiana intów na float czy double generuje taki błąd:

Błąd CS0266 Nie można niejawnie przekonwertować typu „double” na „int”. Istnieje konwersja jawna (czy nie brakuje rzutu?).>

1
int i = 0.0

Widzisz sprzeczność?

1
public double GetRandomNumber(double minimum, double maximum)
{ 
    Random random = new Random();
    return random.NextDouble() * (maximum - minimum) + minimum;
}

masz tutaj funkcje ktora zwraca Ci liczbe losowa pomiedzy dwoma liczbami typu double

0
Patryk27 napisał(a):
int i = 0.0

Widzisz sprzeczność?

To była pozostałość po tym jak wracałem z double na int, moje niedopatrzenie. Bez wpływu na sam program.

@fasadin
Dziękuję, ale nie wiem jak tego użyć nawet :( Jak przesłać te dane do tablicy? No i pytanie jak samą tablicę zadeklarować? Ani double ani float nie działają.

1
double[,] tab1 = new double[10, 10];         
....
tab1[i, n] = GetRandomNumber(0.0, 1.0)

jak nie wiesz nadal na podstawie tego to lap kurs i czytaj podstawy

0

Nadal zwraca mi ten sam błąd i występuje on zawsze kiedy tablica jest deklarowana inaczej niż przez int.

tab1[i, n] = GetRandomNumber(0.0,1.0);

Błąd CS0266 Nie można niejawnie przekonwertować typu „double” na „int”. Istnieje konwersja jawna (czy nie brakuje rzutu?).

Wrzucę dłuższy kawałek, bo może coś spartoliłem po drodze:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public double GetRandomNumber(double minimum, double maximum)
        {
            Random random = new Random();
            return random.NextDouble() * (maximum - minimum) + minimum;
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {
            ......

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                System.IO.StreamReader sr = new
                   System.IO.StreamReader(openFileDialog1.FileName);
                //MessageBox.Show(sr.ReadToEnd());
                MessageBox.Show("Plik został wczytany poprawnie");
                sr.Close();
                double[,] tab1 = new double[10, 10];
                //Random rand = new Random(20);
                for (int i = 0; i < 10; i++ )
                {
                    for (int n = 0; n < 10; n++)
                    {
                        
                        tab1[i, n] = GetRandomNumber(0.0, 1.0);

                    }
                }


            }
.........
0

No skoro chcesz mieć tablicę double'i, to nie twórz tablicy intów: int[,] tab1.

0

Okazuje się, że to chyba VS się zbuntowało, po resecie zatrybiło. Magia... A jeszcze takie pytanie, jakiś prosty sposób żeby tablica nie zapełniała się tylko jednym wynikiem? Po sprawdzeniu potwierdziły się moje przypuszczenia i mam wszędzie to samo. Jakaś podpowiedź wystarczy ;) Bardzo dziękuję za dotychczasową pomoc :)

Ok, ogarnąłem, coś tam z wiedzy gdzieś w tyle głowy się jednak kłębi xD

static Random random = new Random();
public double GetRandomNumber(double minimum, double maximum)
        { 
            return random.NextDouble() * (maximum - minimum) + minimum;
        }

W ten sposób losuje zawsze inną liczbę, wcześniej losowało raz i cała tablica wypełniała się jedną wartością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1