Złożenie stringa z charów

0
foreach (char item in password)
{
    string newPassword="";

    if (item == password[a])
    {
        Console.Write(" "+item+" ");
    }
    else if(item!=password[a])
    {
        Console.Write(" _ ");
    }

    newPassword += item.ToString();
    Console.Write(newPassword);
}

konsola.png

Kod po zakomentowaniu 2 ostatnich linijek działa tak jak to jest przedstawione powyzej. Moim celem jest napisanie tego tak by po dodaniu pętli w której będę podawał kolejną literę poprzednia odgadnięta była już częscia nowego hasła. Czy błędem jest tutaj zastosowanie foreacha?

2

błędem jest tworzenie zmiennej newPassword wewnątrz foreacha

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

namespace hangman
{
    class Game
    {
        public string password;
        
        public Game(string p)

        {
            password = p;
            
        }
        public void Search(int errors)
        {
            int i = 0;
            string newPassword = "";
            
            while (i<errors)
            { 
            string word =Console.ReadLine();
                
                char helper = ' ';

                int a = password.IndexOf(word);




                try
                {
                    foreach (char item in password)
                    {

                    
                        if (item == password[a])
                        {

                            helper = item;

                        }
                        else if (item != password[a])
                        {
                            
                            helper = '_';
                        }
                        

                        newPassword += helper.ToString() + " ";
                        

                    }
                }
                catch (IndexOutOfRangeException ex)
                {
                    Console.WriteLine("Zła litera");
                }

                
                Console.Write(newPassword + "\n");

            }
            


        }
        

    }
}

Jako że mam kolejny problem związany z tym programem, będę dalej kontunuowal w tym wątku. Mam problem z wyświetlaniem hasła:
title. Chcę żeby to działało w prawidłowy sposób. Próbowałem różnych przypisań, lecz wszystkie w zasadzie jeszcze bardziej rozwalały działanie programu. Prosiłbym o jakieś naprowadzenie na dobry trop

2

A takie coś?

4po.PNG

static void Main(string[] args)
{
    string password = "swiftlys";
    string mask = new String('_', password.Length);

    while (mask.Contains("_"))
    {
        var input = Console.ReadKey().KeyChar;
        Console.WriteLine();

        var sb = new StringBuilder(mask);

        for (int i=0; i<password.Length; i++)
        {
            if (password[i] == input)
            {
                sb[i] = input;
            }
        }

        mask = sb.ToString();
        Console.WriteLine(mask);
    }
}
0

Dziękuje. Mam tylko pytanie czym jest StringBuilder czy wcześniej użyty IndexOutOfRangeException? Bo szczerze mówiąc gdyby nie twój program i jakiś program odnośnie wyjątków, nie wiedziałbym, że te byty istnieją.
Tzn w sumie wiem co to jest,. Pytanie chyba powinno być skonstruowane gdzie tego szukać w środowisku? Isnieje jakiś klawisz pokazujący wszystkie opcje(tak jak się to dzieje np w przypadku metod i operatora ".")?

2
Mam tylko pytanie czym jest StringBuilder

https://cezarywalenciuk.pl/blog/programing/post/stringbuilder-c-i-net-40-operacje-na-napisach-05
tl;dr StringBuilder sluzy do manipulacji na stringu, jako ze string jest obiektem immutable wiec zmiana stringu jest nieefektywna

czy wcześniej użyty IndexOutOfRangeException

troche tego nie rozumiem, ale IndexOutOfRangeException jest wyjatkiem i na pewno nie sluzy do sprawdzania czy dana litera jest w tekscie.
Wyjatki powinny byc na wyjatkowe sytuacje, nie do sterowania logika programu

 Isnieje jakiś klawisz pokazujący wszystkie opcje(tak jak się to dzieje np w przypadku metod i operatora ".")?

to o czym myslisz to takie cos nie istnieje. Za to jak przeczytalbys jakakolwiek dobra ksiazke do c# to tam zawsze jest wyjasniony stringbuilder.

0
mr_eko_12 napisał(a):

Isnieje jakiś klawisz pokazujący wszystkie opcje(tak jak się to dzieje np w przypadku metod i operatora ".")?

Spróbuj ctrl + spacja

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