开发者

The nextLine() doesn't work right.. (Java)

开发者 https://www.devze.com 2023-03-07 19:30 出处:网络
I have made an object named \"Skill\" and the main program. Skill: import java.util.*; class Skill { static Scanner reader = new Scanner(System.in);

I have made an object named "Skill" and the main program. 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.Unders开发者_StackOverflowcoreIt();
                           sPro = this.ColorIt ( sPro );
                           break;
            default:
                                break;
        }
        sPro+= " - " + this.sText + "\n";
        sPro+= this.WhiteColorIt ( 2 ) + " " + this.BoldIt() + ".";
        return sPro;
    }
}

Main:

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

I am using BlueJ, and while i tried to test the program i made 2 Skills. so I used twice the "Skill()", but in the second time the reader.nextLine() didn't work.


You are creating two instances of the scanner class, both attached to System.in. One is situated in you Main class, the other one in the Skill class. Those two interfere when they try to read from the same inputstream.

A possible solution is to instantiate only one scanner and pass it as argument to the constructor of your Skill class.

0

精彩评论

暂无评论...
验证码 换一张
取 消