2011-05-22 5 views
0

J'ai fait un objet nommé "Skill" et le programme principal. Compétences:Le nextLine() ne fonctionne pas correctement .. (Java)

import java.util.*; 
class Skill 
{ 
    static Scanner reader = new Scanner(System.in); 
    public int iStar; 
    public int iColor; //0-White, 1-Red, 2-Orange, 3-Grenn, 4-DeepSkyBlue, 5-Blue. 
    public String sName; 
    public String sText; 
    public String sLink; 
    public String sRank; 
    Skill() 
    { 
     System.out.println ("What is the skill name?"); 
     this.sName = reader.nextLine(); 
     System.out.println ("Insert the icon's link please"); 
     this.sLink = reader.nextLine(); 
     System.out.println ("Which rank is recommended to this skill?"); 
     this.sRank = reader.nextLine(); 
     System.out.println ("Explanation about the skill"); 
     this.sText = reader.nextLine(); 
     System.out.println ("Text color?" + "\n" + "1-Red, 2-Orange, 3-Green, 4-DeepSkyBlue, 5-Blue."); 
     this.iColor = reader.nextInt(); 
     System.out.println ("How many stars would you like? (0-2)"); 
     this.iStar = reader.nextInt(); 
    } 
    void FixMe () 
    { 
     int iNum = 0; 
     System.out.println ("Which one of the data would you like to change?" + "\n" + "0-non of them, 1-Star, 2-Color, 3-Name, 4-Text, 5-Link, 6-Rank."); 
     do 
     { 
      switch (reader.nextInt()) 
      { 
       case 0: iNum = 0; 
           break; 
       case 1: this.iStar = reader.nextInt(); 
           iNum = 0; 
           break; 
       case 2: this.iColor = reader.nextInt(); 
           iNum = 0; 
           break; 
       case 3: this.sName = reader.nextLine(); 
           iNum = 0; 
           break; 
       case 4: this.sText = reader.nextLine(); 
           iNum = 0; 
           break; 
       case 5: this.sLink = reader.nextLine(); 
           iNum = 0; 
           break; 
       case 6: this.sRank = reader.nextLine(); 
           iNum = 0; 
           break; 
       default: System.out.println ("Error, Please insert again the number of the data (!) ."); 
            iNum = 1; 
            break; 
      } 
     } 
     while (iNum == 1); 
    } 
    String ImageIt () 
    { 
     String sPro = "[IMG]" + this.sLink + "[/IMG]"; 
     return sPro; 
    } 
    String BoldIt () 
    { 
     String sPro = "[B]Rank " + this.sRank + "[/B]"; 
     return sPro; 
    } 
    String UnderscoreIt () 
    { 
     String sPro = "[U]" + this.sName + "[/U]"; 
     return sPro; 
    } 
    String ColorIt (String sNoob) 
    { 
     String sPro = "[COLOR=\""; 
     int iNum = 0; 
     do 
     { 
      switch (this.iColor) 
      { 
       case 1: sPro+= "Red"; 
           iNum = 0; 
           break; 
       case 2: sPro+= "Orange"; 
           iNum = 0; 
           break; 
       case 3: sPro+= "Green"; 
           iNum = 0; 
           break; 
       case 4: sPro+= "DeepSkyBlue"; 
           iNum = 0; 
           break; 
       case 5: sPro+= "Blue"; 
           iNum = 0; 
           break; 
       default: System.out.println ("Error, Please insert again the number of the color (!) ."); 
            this.iColor = reader.nextInt(); 
            iNum = 1; 
            break; 
      } 
     } 
     while (iNum == 1); 
     sPro+= "\"]" + sNoob + "[/COLOR]"; 
     return sPro; 
    } 
    String WhiteColorIt (int FirstOrSecond) 
    { 
     String sPro = "[COLOR=\"White\"]"; 
     if (FirstOrSecond == 1) 
     { 
      int iNum = 0; 
      do 
      { 
       if (this.iStar >= 3 || this.iStar < 0) 
       { 
        System.out.println ("Error, Please insert again the number of the stars (!) ."); 
        this.iStar = reader.nextInt(); 
        iNum = 1; 
       } 
       else 
       { 
        iNum = 0; 
       } 
      } 
      while (iNum == 1); 
      iNum = 2 - this.iStar; 
      for (; iNum != 0; iNum--) 
       sPro+= "*"; 
      sPro+= "[/COLOR]"; 
     } 
     else 
      sPro+= "**[/COLOR]"; 
     return sPro; 
    } 
    /*הפעולה הראשית*/ 
    String ExtractMe() 
    { 
     String sPro = ""; 
     String sTemp = ""; 
     switch (this.iStar) 
     { 
      case 0: sPro+= this.WhiteColorIt (2) + " "; 
          sTemp = this.ImageIt() + " " + this.UnderscoreIt(); 
          sTemp = this.ColorIt (sTemp); 
          sPro+= sTemp; 
          break; 
      case 1: sPro+= this.WhiteColorIt (1); 
          sTemp = "* " + this.ImageIt() + " " + this.UnderscoreIt(); 
          sTemp = this.ColorIt (sTemp); 
          sPro+= sTemp; 
          break; 
      case 2: sPro+= "** " + this.ImageIt() + " " + this.UnderscoreIt(); 
          sPro = this.ColorIt (sPro); 
          break; 
      default: 
           break; 
     } 
     sPro+= " - " + this.sText + "\n"; 
     sPro+= this.WhiteColorIt (2) + " " + this.BoldIt() + "."; 
     return sPro; 
    } 
} 

principal:

import java.util.*; 
public class Main 
{ 
    static Scanner reader = new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     String sPro = ""; 
     Skill Winner01 = new Skill(); 
     System.out.println ("האם אתה רוצה לתקן את אחד הנתונים?" + "\n" + "1-Yes, 2-No"); 
     if (reader.nextInt() == 1) 
       Winner01.FixMe(); 
     sPro+= Winner01.ExtractMe() + "\n"; 
     Skill Winner02 = new Skill(); 
     System.out.println ("האם אתה רוצה לתקן את אחד הנתונים?" + "\n" + "1-Yes, 2-No"); 
     if (reader.nextInt() == 1) 
       Winner02.FixMe(); 
     sPro+= Winner02.ExtractMe() + "\n"; 
     System.out.println (sPro); 
    } 
} 

J'utilise BlueJ, et alors que j'ai essayé de tester le programme je l'ai fait 2 compétences. J'ai donc utilisé deux fois le "Skill()", mais dans la deuxième fois le reader.nextLine() ne fonctionnait pas.

+0

de quelle manière 'nextLine()' ne fonctionne pas correctement? Qu'est-ce qui se passe? Qu'attendez-vous qu'il se passe? – McDowell

+0

Une raison peut être que Scanner est statique et partagé entre les deux instances de votre classe de compétences. –

Répondre

2

Vous créez deux instances de la classe de scanner, toutes deux associées à System.in. L'un est situé dans votre classe Main, l'autre dans la classe Skill. Ces deux interférer quand ils essaient de lire à partir du même flux d'entrées.

Une solution possible est d'instancier un seul scanner et de le passer en argument au constructeur de votre classe Skill.

+0

Pouvez-vous m'expliquer comment le changer? Je n'ai pas appris à faire plus de choses avec le scanner et à travailler avec lui. – Shaked

+0

A) se débarrasser de la ligne 'static Scanner reader = new Scanner (System.in);' dans la classe 'Skill'. B) changez votre constructeur de 'Skill() {...}' à 'Skill (Scanner reader) {...}'. C) Change 'new Skill()' en nouveau 'Skill (reader)' dans votre classe principale. D) faites de même pour 'FixMe'. – Howard

Questions connexes