[JAVA] Je suis immédiatement tombé sur la méthode d'entrée standard avec AtCoder.

introduction

J'ai travaillé en tant qu'ingénieur jusqu'à maintenant, mais j'ai commencé à faire du prégramme de compétition parce que je pensais que c'était difficile à mettre en œuvre parce que c'était principalement dans le processus en amont. J'ai réussi à résoudre une question, mais je publierai un mémorandum de ce sur quoi j'ai trébuché.

Cette fois, j'écrirai sur l'entrée de données «Scanner».

Problème contesté

Le score passé d'Atcode de 100 problème ... c'est-à-dire un problème simple.

https://atcoder.jp/contests/abc042/tasks/abc042_a

Première soumission

J'ai réussi à coder en regardant divers sites et je l'ai exécuté à partir du terminal vscode pour obtenir les résultats attendus. Ce qui suit est le contenu du code (probablement un code sale du point de vue d'un expert, mais pardonnez-moi s'il vous plaît ...)

public class Main {
    public static void main(String args[]) {
        String answer = "YES";
        String[] haiku = args;
        int sum = 0;
        for(int i = 0; i < 3; i++){
          if(haiku[i].equals("7") || haiku[i].equals("5")){
              sum = sum + Integer.valueOf(haiku[i]);
              System.out.println(sum);
          }
          else{
              answer = "NO";
          }
          System.out.println(haiku[i]);
        } 
        if(sum != 17){
            answer = "NO";
        }
        System.out.println(answer);
    }
}

résultat

Erreur d'exécution ... Je n'ai même pas pu vérifier le contenu ... \ (^ o ^) /

スクリーンショット 2020-01-25 19.45.10.png

Qu'est ce qui ne s'est pas bien passé

Il semble que la méthode d'entrée était tout simplement inutile.

Quand je tape «Java Main X X X» dans le terminal, il est stocké dans le tableau «args» séparé par des espaces, donc j'ai pensé que c'était correct, mais je l'ai complètement mal compris.

Que devrais-je faire

Il est recommandé d'utiliser Scanner pour obtenir le contenu d'entrée. Récupérez l'entrée à la partie next (); et utilisez-la à nouveau pour obtenir la valeur d'entrée suivante.

Scanner sc = new Scanner(System.in);
int i = Integer.parseInt(sc.next());

5ème soumission

J'ai refactoré le code plusieurs fois (je suis désolé je veux utiliser le terme ...) et j'ai réussi à le supprimer lol

import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
        String answer = "YES";
        Scanner s = new Scanner(System.in);
        int sum = 0;
        for(int i = 0; i < 3; i++){
            int haiku = Integer.parseInt(s.next());
          if(haiku == 7 || haiku == 5 ){
              sum = sum + haiku;
          }
          else{
              answer = "NO";
          }
        } 
        if(sum != 17){
            answer = "NO";
        }
        System.out.println(answer);
    }
}

Site de référence

https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4 https://uxmilk.jp/48686

Si vous avez des suggestions, n'hésitez pas à me le dire-m (_ _) m

Recommended Posts

Je suis immédiatement tombé sur la méthode d'entrée standard avec AtCoder.
Sortez avec un suffixe sur la méthode
Sortez avec un suffixe sur la méthode 2
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
Apprendre Ruby avec AtCoder 11 Comment recevoir une entrée standard souvent utilisée
Simuler la méthode simplex avec GUI
Programmation avec ruby (en route)
J'ai essayé d'expliquer la méthode
Enregistré parce que j'étais accro à l'entrée standard de la classe Scanner
Mes réflexions sur la méthode d'égalité (Java)
Je voulais ajouter @VisibleForTesting à la méthode
J'étais accro à la méthode du rouleau
[JDBC ③] J'ai essayé d'entrer à partir de la méthode principale en utilisant des espaces réservés et des arguments.
Je suis tombé sur la version Java dans Android Studio, je vais donc le résumer