2017-10-10 4 views
1

J'ai une entrée de chaîne qui, cette entrée a un nom d'équipe et un score séparés par un espace. par exemple bb 3, teamd 5 le gagnant doit être teamdCaractères spécifiques à l'impression

Afin d'obtenir l'équipe gagnante qui a marqué score le plus élevé, je fais ce qui suit:

Scanner scanner = new Scanner(System.in); 
    int cases = scanner.nextInt(); 

    printWinnerTeam(cases); 



} 

public static void printWinnerTeam(int cases) { 
    Scanner scanner = new Scanner(System.in); 
    String str = ""; 
    String winnerTeam = ""; 
    int winnerScore = 0, countedChar = 0; 

    for (int i = 0; i < cases; i++) { 
     str += scanner.nextLine(); 
    } 
    char[] arr = str.toCharArray(); 
    for (int i = 0; i < arr.length; i++) { 
     countedChar++; 
     if (arr[i] == ' ') { 
      if (str.charAt(i + 1) > winnerScore) { 
       winnerTeam = ""; 
       winnerScore = (int) str.charAt((int) i + 1); 
       for (int j = 0; j < countedChar; j++) { 
        winnerTeam += str.charAt(j); 
       } 
       countedChar = 0; 
      } else { 
       //winnerTeam = ""; 
       countedChar = 0; 
      } 
     } 
    } 
    System.out.println(winnerTeam); 
} 

Mais il fonctionne pas préfet, il est fait câblé d'impression, comment faire ce travail comme prévu?

+0

que diriez-vous simplifier le traitement, mais juste comme vous allez. Si le score des lignes saisies est le plus grand, alors stockez le nombre et le nom de l'équipe - utilisez String.split (","); –

+1

Je n'ai pas essayé votre code, mais j'imagine qu'un gros problème est la concaténation de 'str + = scanner.nextLine();' La nouvelle ligne va être ajoutée directement à la fin des lignes précédentes 'number' –

+0

@ScaryWombat en effet oui, je vais penser hors boîte, mon problème avec '+ =', merci, n'hésitez pas à le faire accepter la réponse – user1058652

Répondre

1

Je n'ai pas essayé votre code, mais j'imagine un gros problème est la concaténation de str += scanner.nextLine(); La nouvelle ligne va être jointe directement sur l'extrémité des lignes précédent numéro de

Jetez un oeil à cette

Scanner sc = new Scanner(System.in); 
    int bestScore = Integer.MIN_VALUE; 
    String team = "Nothing entered"; 
    System.out.println("how many teams"); 
    int count = sc.nextInt(); 
    sc.nextLine(); 
    while (count-- > 0) { 
     System.out.println("Entered team,score"); 

     String line = sc.nextLine(); 
     String arr [] = line.split(" "); 
     // check size - TBD 
     if (Integer.parseInt(arr[1]) > bestScore) { 
      bestScore = Integer.parseInt(arr[1]); 
      team = arr[0]; 
     } 
    } 

    System.out.println("nest team is " + team + " with a score of " + bestScore); 
+1

@AndyTurner Merci, je dois nettoyer mon écran –

+0

Excusez-moi, savez-vous ce qui est faux [ici] (https://ideone.com/tB1Akw), pour obtenir runTimeError avec mon code? – user1058652

+0

@android fonctionne bien pour moi dans Eclipse 'combien de cas combien d'équipes équipe Entré, le score test1 2 équipe Entré, le score me 23 me combien d'équipes équipe Entré, le score test2 4 équipe Entré, le score me_again 23 me_again me me_again ' –

0

Si je dois faire quelque chose comme ça, je vais le faire comme ceci:

import java.util.*; 
     public class winner { 
      public static void main (String args []) { 
      Scanner scanner = new Scanner(System.in); 
      int cases = scanner.nextInt(); 

      printWinnerTeam(cases); 
     } 

    public static void printWinnerTeam(int cases) { 
      Scanner scanner = new Scanner(System.in); 
      String winnerTeam = ""; 
      String Team=""; 
      int winnerScore = 0, score = 0; 

      for (int i = 0; i < cases; i++) { 
       Team = scanner.next(); 
       score = scanner.nextInt(); 
       if(score > winnerScore){ 
       winnerTeam = Team; 
       winnerScore = score; 
       } 

      } 
      System.out.println("Winner team" + winnerTeam + "Score:" + winnerScore); 
     } 
     }