nextLine()无法正常工作..(Java)

时间:2011-05-22 10:34:09

标签: java

我制作了一个名为“Skill”的对象和主程序。 技能

    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;
    }
}

主:

    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 );
    }
}

我正在使用BlueJ,当我尝试测试该程序时,我做了2个技能。所以我使用了两次“技能()”,但是第二次使用了reader.nextLine()。

1 个答案:

答案 0 :(得分:2)

您正在创建两个扫描仪类实例,两个实例都附加到System.in。一个位于Main类中,另一个位于Skill类中。当他们试图从相同的输入流中读取时,这两个会发生干扰。

一种可能的解决方案是仅实例化一个扫描程序并将其作为参数传递给Skill类的构造函数。