-2
votes

S'échapper pendant la boucle, tandis que les conditions sont fausses

Je vois que cela n'attend pas pendant les heures spécifiées.

J'essaie d'apprendre C # et je ne sais pas exactement ce que toute la syntaxe est encore. Je veux juste savoir s'il y a de meilleures façons d'accomplir cette tâche. P>

while (DateTime.Now.DayOfWeek == DayOfWeek.Saturday 
    && DateTime.Now.DayOfWeek == DayOfWeek.Sunday 
    && DateTime.Now.Hour <=8 
    && DateTime.Now.Hour >=18  
    && DateTime.Now.Minute <=9)
{
    Random waitTime = new Random();
    int milliseconds = waitTime.Next(120000, 180000);
    System.Threading.Thread.Sleep(milliseconds);
}


24 commentaires

Vous ne pouvez pas être à la fois samedi et dimanche ... En plus DateTime.now.dayofweek == Dayofweek.Saturday && DateTime.now.dayofeek == Dayofweek.sunday Vous ne pouvez pas être vrai dans la planète que nous sommes! Moi pense que tu veux lire sur le || (ou opérateur) et comprendre la logique booléenne. C1 ou C2 signifie C1 ou C2 peut être vrai pour être évalué à vrai. C1 et C2 signifie C1 et C2 doivent être fidèles à évaluer à vrai.


De plus, denttime.now.hour ne peut pas être simultanément inférieur à 8 et plus de 18 ans.


Vous voudrez en savoir plus sur l'utilisation correcte des deux && et || , ainsi que l'ordre de la précédente. Savez-vous ce que && signifie réellement / fait?


Votre logique utilise tous les "et" s, mais vous avez un certain nombre de "ou" dans votre description.


Vous aussi n'a jamais besoin de créer de nouveaux générateurs aléatoires dans une boucle ou que votre prochaine question peut être une question plutôt fréquemment posée.


@Natpongjardenlarp: Heureusement, ils ont finalement modifié la mise en œuvre par défaut de aléatoire de sorte que la création d'une boucle dans une boucle ne donne pas le même numéro encore et encore. Mais c'est toujours une mauvaise pratique.


La compétence dont vous avez besoin d'apprendre à réussir à la programmation est simplifier le problème . Vous dites "Je veux qu'il attendit pendant que c'est samedi ou dimanche ..." OK, puis écrivez un programme qui ne fait qu'une chose: identifie si c'est samedi ou dimanche . Vous ne pouvez pas écrire le programme plus compliqué jusqu'à ce que vous puissiez écrire avec succès le programme plus simple, donc écrire le programme plus simple d'abord . Vous auriez trouvé votre bogue beaucoup plus vite si vous avez essayé d'écrire ce programme.


Maintenant, plus fondamentalement, ce programme est très cassé; Ce n'est pas du tout la bonne façon d'attendre qu'une condition soit remplie.


Il existe des programmes et des bibliothèques dont l'unique objectif est de planifier le code qui doit être exécuté régulièrement sous diverses règles, parfois compliquées,. Vous devriez vraiment utiliser l'un de ces systèmes plutôt que d'écrire un à partir de zéro, car vous découvrirez invariablement que vous n'avez pas comptabilisé toutes les choses nécessaires pour effectuer cette tâche, car elle compliquait de manière trompeuse à faire correctement.


@Jonh merci, je suis à peu près sûr que je veux juste changer tout && vers || @edplunkett yup, modification && vers || @brootswaymb d'un premier coup de poignard à la mise en œuvre de quelque chose que j'ai vu ailleurs. @juharr je me suis rendu compte que et demandait une solution.


@Natpongjardenlarp Devrais-je déplacer Random WaiTime = Nouveau aléatoire (); à l'extérieur de la boucle tandis que?


@ERICLIPPERT Je l'avais cassé en plusieurs sections, qui fonctionnait correctement, puis je me suis rendu compte que cela progressait à travers les différentes parties, sans vérifier le tout. Comme si je le faisais vérifier la minute avant la journée, cela attendrait au 0001, aller à 0011, passez la vérification des minutes, attendez jusqu'à ce que dimanche soit terminée, puis courez au 0001 lundi. Donc, je veux que cela vérifie si l'une des conditions est vraie, cela doit donc être fait en une ligne.


@ Calcullippert me disant de ne pas faire quelque chose et ne pas suggérer une alternative est totalement inutile .


@Servy j'ai remarqué que c'est compliqué, c'est pourquoi je demande aux pairs de l'aide. Mais cela ne signifie pas que je ne peux pas obtenir mon comportement exact à l'aide d'une autre méthode. Et cela ne signifie certainement pas que cela ne devrait pas être tenté. Et, vous ne m'avez pas donné de détails pour aller regarder.


@Claskotheknight plutôt que d'obtenir d'autres personnes pour réparer un ou deux petits bugs dans votre code, quand il y a une énorme quantité de travail à faire, vous devriez simplement utiliser un produit existant qui résout ce problème . Re-Créer quelque chose comme ça à partir de zéro n'est tout simplement pas quelque chose que vous devriez faire sans raison. Vous pouvez faire des recherches pour trouver des outils de planification des tâches pour le système que vous développez, ils sont suffisamment faciles à trouver. Lequel que vous souhaitez utiliser dépendra de vos environnements de programmation et de vos fonctionnalités nécessaires.


@Servy Cette méthode me laisserait sans comprendre ce que cela va exactement, et pourquoi. Je suis venu ici pour savoir, pas pour le consumérisme.


@Claskotheknight et pourtant, vous n'avez pas gagné cette connaissance en posant cette question non plus. Tout ce que vous avez dans les réponses en posant cette question est un tas de code qui n'est toujours pas une mise en œuvre efficace de ce que vous voulez. Si vous souhaitez réellement apprendre à accomplir cela correctement que utiliser un système de planification existant , car c'est la bonne façon de résoudre ce problème. Si vous voulez comprendre comment cela fonctionne, la plupart offrent de nombreuses documents sur ce qu'ils font, et certains seront open source si c'est quelque chose que vous vous souciez de.


Il est difficile de savoir où commencer; Le code est tellement faux de tant de façons; Du trivial, comme confondant la signification de "et" et ", puis de la structure à grande échelle du programme et de l'espace problématique prévu. Si vous aviez un ami qui essayait de résoudre des problèmes de calcul, mais ils ont montré à travers leur travail qu'ils n'ont pas compris la différence entre l'addition et la multiplication, comment les conseilleriez-vous de continuer? Vous devez prendre la marche, le retour et être solide sur les bases avant d'essayer d'écrire un planificateur.


@Servy j'ai appris de cette discussion. J'ai appris que || signifie ou. J'ai appris que vous devriez créer des variables en dehors de la boucle qu'ils seront utilisées. J'ai appris que vous préférez lancer une bibliothèque entière à quelque chose plutôt que de créer le comportement exact manuellement. Et si je n'avais que 10240 octets de mémoire libre? J'ai aussi appris que vous ne pouvez pas bloquer les utilisateurs sur le débordement de la pile.


@ERIFLIPPERT Pour que votre analogie soit plus apte, je n'avais jamais appris || , c'était l'information dont j'avais besoin. Comment puis-je obtenir cela de vos commentaires?


@Claskotheknight Si vous vouliez savoir comment ou deux booléens ensemble, pourquoi n'avez-vous pas cherché à faire cela? C'est une réponse facilement trouvée et non une personne la mieux trouvée en vous demandant de planifier les tâches. Dire que vos variables devraient être scopées en dehors de la boucle est une très mauvaise généralisation. Que vous pensez utiliser une bibliothèque ou un produit pour résoudre un problème comme celui-ci suggère Vous n'êtes toujours pas au courant de tous les problèmes impliqués dans cette tâche . Comme je l'ai dit, le problème est trompeusement difficile de vraiment avoir raison. Avez-vous vraiment un ordinateur qui n'a que 10k mémoire? Je doute en quelque sorte.


@Servy je suis nouveau et je ne savais pas ce que j'avais besoin de savoir, la solution était inconnue inconnue. Je ne savais pas ce que je devais changer. La solution la plus simple consistait à poser une question en ce qui concerne mon problème exact et ses besoins. Si vous souhaitez m'aider, j'ai posté plus de code ci-dessous, dites-moi ce qui irait mal et pourquoi.


@Claskotheknight En ce qui concerne les opérateurs booléens, votre question demande ce que && fait, qui est une question qui est répondu simplement en examinant simplement la documentation de cet opérateur. Et votre question demande comment faire quelque chose quand A ou B ou C ... est vrai, donc apparemment vous avez fait SAVOIR que vous vouliez savoir à une ou deux conditions ensemble, ils n'étaient pas inconnus. Plutôt que d'essayer de déterminer comment réécrire un processus long et compliqué à partir de zéro, et traiter de tous les problèmes de votre code dans la production avant de vous rendre compte, vous pouvez plutôt utiliser une solution de travail existante.


@Claskotheknight: La chose importante à obtenir des commentaires n'est pas la syntaxe de base de la langue; Vous pouvez apprendre cela en lisant littéralement n'importe quel tutoriel. La chose importante à sortir de ces commentaires est Vous attaquez presque certainement cette tâche de manière très mauvaise . Le fait que vous ne connaissez pas même le strict minimum nécessaire pour écrire un programme C # n'est pas le problème en soi; Tout le monde était un débutant une fois, et vous vous améliorerez. Le problème le plus fondamental est les inconnus inconnus. Maintenant, vous avez un inconnu connu: Vous ne savez pas comment écrire un planificateur ; Maintenant, vous pouvez rechercher cela.


3 Réponses :


2
votes

Jonh a raison, il ne peut pas être à la fois samedi et dimanche. Voici ce que votre code devrait ressembler à xxx


7 commentaires

Enfin ou peut être incorrect en fonction de ce qu'il veut ... Il peut vouloir que ce soit seulement les samedis et dimanches ... mais pas sûr assez vague.


@Jonh ouais je vais le mettre à jour avec différentes options pour différentes interprétations de ce qu'il cherche.


@Jonh je veux que cela pause si l'une des conditions est vraie.


@ chris-écraser-code parfait !! Cela me donne tellement d'informations, je pourrai la modifier dans exactement ce que je veux. M'approuvoir du code de variable booléen et de vérifier. Je l'aime.


@ Chris-Crush-code Je suis un peu confus car les trois dernières lignes sont utilisées pour vérifier. Est-ce que cela met à jour Issatorsun et les autres pour refléter l'heure actuelle? Devez-vous faire cela parce que vous définissez ces variables plus tôt? Et si je mettez la version expansée au lieu de la variable booléenne?


@Claskotheknight Depuis l'évaluation de la date et de l'heure est en dehors de la boucle tandis que vous devez vérifier si les conditions sont toujours vraies à la fin de la boucle, sinon vous ne quitterez jamais la boucle. La boucle tandis que la boucle continue de continuer à boucler pendant que ces variables sont vraies, donc si vous ne réévaluez jamais les variables, une fois que vous êtes entré dans la boucle, vous ne sortirez jamais depuis que vous ne les avez jamais définis sur False.


@Claskotheknight aussi, car vous êtes nouveau pour la programmation, la plus grande leçon à apprendre ici est de comprendre exactement ce que vous essayez de faire - si vous ne pouvez pas l'épeler en anglais (ou quelle que soit votre langue maternelle) sans Toute ambiguïté, alors vous aurez un moment difficile de traduire votre idée au code.



-1
votes

Puisque vous apprenez, je vous conseillerais d'utiliser une méthode booléenne pour votre logique et de l'appeler sur la fonction tandis que:

Méthode: P>

while ( IsWaitingTime )
    {
        Random waitTime = new Random();
        int milliseconds = waitTime.Next(120000, 180000);
        System.Threading.Thread.Sleep(milliseconds);
    }


0 commentaires

-2
votes

De ce que j'ai appris au cours des 20 dernières minutes, cela semble que cela pause si l'une des conditions suivantes est remplie; Est-ce dimanche, est-ce samedi, Est-ce avant 08h00, Est-ce plus tard que 1800, Est la minute inférieure à 10 xxx


2 commentaires

Est-ce que cela est destiné à être une réponse à la question, une nouvelle question, ou un commentaire, ou autre chose entièrement? Veuillez uniquement publier des réponses dans la section de réponse . Il n'est pas du tout clair que cela est destiné à répondre à la question, d'autant plus qu'il y a déjà une réponse acceptée.


@ERICLIPPERT Ceci est destiné à être une réponse. J'ai accepté la réponse de Chris-Chrus-Code car c'est la réponse la plus large et la plus utile. Je pose habituellement ce que j'utiliserai dans mon script comme réponse, pour montrer à quiconque intéressé et pour les commentaires potentiels.