Brak wyświetlania tablicy float z funkcji string

Brak wyświetlania tablicy float z funkcji string
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 105
0

Cześć!
Za zadanie mam napisać metodę która zwraca największą wartość float znalezioną w tekście z liczbami zmiennoprzecinkowymi. Tekst zawiera tylko liczby, oddzielone od siebie znakiem tabulacji '\t' Największa wartość jest wyszukiwana jedynie dla liczb mniejszych od -3,14 lub większych od 7,63.

Oto mój program który jest zawarty w "Class Library"

Kopiuj
using System.IO;
namespace Biblioteka
{
    public class Operacje
    { public static float Najwieksza(string tekst)
        {
            string[] dane = tekst.Split(' ');
            float[] tablice = new float[dane.Length];
            for (int i = 0; i < dane.Length; i++)
            {
                tablice[i] = Convert.ToSingle(dane[i]);
            }
            float max = 0;
            for (int i = 0; i < tablice.Length; i++)
            {
                if (tablice[i] > 7.63 || tablice[i] < -3.14) max = tablice[i];
            }
            if (max == 0) return 0;
            for (int i = 0; i < tablice.Length; i++)
            {
                if ((tablice[i] > 7.63 || tablice[i] < -3.14) && max < tablice[i]) max = tablice[i];
            }
            return max;
        }
}
}

A tutaj już w Mainie w "Console Application"

Kopiuj
float[] tab = { 1,22, 2,34, 3,05, 4,34, 5,18, 18,90 };
Console.WriteLine(Operacje.Najwieksza(tab));
Console.ReadKey();

Moje pytanie co robię źle? Wyskakuje mi błąd gdzie jest mowa że nie można skonwertować z float[] do string, i że "Error 1 The best overloaded method match for 'Biblioteka.Operacje.Najwieksza(string)' has some invalid arguments c:\users\seweryn\documents\visual studio 2012\Projects\Próbbna8domowa\ConsoleApplication1\Program.cs 18 33 ConsoleApplication1
"

SO
  • Rejestracja: dni
  • Ostatnio: dni
2

Moje pytanie co robię źle? Wyskakuje mi błąd gdzie jest mowa że nie można skonwertować z float[] do string

Kopiuj
public static float Najwieksza(string tekst)

vs

Kopiuj
float[] tab = { 1,22, 2,34, 3,05, 4,34, 5,18, 18,90 };
Console.WriteLine(Operacje.Najwieksza(tab));

Metoda oczekuje stringa, a podajesz tablicę floatów.

W ogóle to kod strasznie słaby.

To można zrobić tak:

Kopiuj
var input = "-5,15\t3,12\t7,12";
var floats = input.Split('\t').Select(float.Parse);
var max = floats.Where(x => x < -3.14 || x > 7.63).Max(); 
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 105
0

Wiem o tym że metoda oczekuje string a podaję tablicę float. Ale jak to obejść? Kod już wolałbym aby został taki jaki jest, bez względu na to czy jest on słaby czy też nie. Twojego zapisu nie rozumiem, nie wiem gdzie mam go wstawić/w jaki sposób zapisać i co on oznacza...

aurel
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak to obejść? No najlepiej to podać mu stringa...

var x = "";
foreach (var t in tab)
{
x = x + t.ToString() + " "; //<---- Potem split jest po spacji, a nie po \t
}

Console.WriteLine(Operacje.Najwieksza(x));

Kopiuj
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 105
0
aurel napisał(a):

Jak to obejść? No najlepiej to podać mu stringa...

var x = "";
foreach (var t in tab)
{
x = x + t.ToString() + " "; //<---- Potem split jest po spacji, a nie po \t
}

Console.WriteLine(Operacje.Najwieksza(x));

Kopiuj


To nie działa. Program się wykrzacza

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.