2014-05-12 50 views
0

正如標題所說,我想用一個來自用戶的輸入來掃描整行輸入。輸入應該像「Eric 22 1」。在一行中掃描不同類型的變量

如果nextString()不應該這樣使用,我應該只使用hasNext

Java代碼:

import java.util.Scanner; 

public class tugas1 
{ 
    public static void main(String []args) 
    { 
     String name; 
     int age; 
     boolean sex; 

     Scanner sc = new Scanner(System.in); 

     System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :"); 
     name = sc.nextString(); 
     age = sc.nextInt(); 
     sex = sc.nextBoolean(); 

     if(isString(name)) 
     { 
      if(isInteger(age)) 
      { 
       if(isBoolean(sex)) 
       { 
        System.out.println("Correct format. You are :" +name); 
       } 
       else 
       { 
        System.out.println("Please input the age in integer"); 
       } 
      } 
      else 
      { 
       System.out.println("Please input the age in integer"); 
      } 
     } 
     else 
     { 
      System.out.println("Please input the name in string"); 
     } 
    } 
} 

添加和編輯行後:

System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :"); 
    String input = sc.nextLine(); 

String[] inputAfterSplit = input.split(" "); 

String name = inputAfterSplit[0]; 
int age = Integer.parseInt(inputAfterSplit[1]); 
boolean sex = Boolean.parseBoolean(inputAfterSplit[2]); 

我想補充的,如果(名稱的instanceof字符串)。我很久沒有碰過Java了,我忘了是使用instanceof的方式,還是錯了? 重點是我想比較,如果輸入變量是在int或字符串或布爾。

if(name instanceof String) 
{ 
    if(age instanceof Integer) 
    { 
     if(sex instanceof Boolean) 
     {  
      System.out.println("All checked out") 
     } 
     else 
     { 
      System.out.println("Not boolean") 
     } 
    else 
    { 
     System.out.println("Not int") 
    } 

System.out.println("Not string") 
} 

這些線路是否工作?

+0

這只是所謂的'下一個()','不nextString()'。 –

+0

謝謝!所以其他nextblahblah()是正確的? nextInt(),nextBoolean()可以嗎? – KaeM

+0

好吧,當然。該文檔位於http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html我認爲'nextBoolean'尋找'true'或'false';因爲你有'1'或'0',所以最好使用'nextInt',然後轉換它。 –

回答

0

請輸入您的姓名,年齡,性別

,因爲你需要在特定的序列中插入值。


使用nextLine(),並執行split

例如:"Abc 123 true 12.5 M"

String s[]=line.split(" "); 

,你將有

s[0]="Abc" 
s[1]="123" 
s[2]="true" 
s[3]="12.5" 
s[4]="M" 

比他們分析所需的類型。

String first=s[0]; 
int second=Integer.parseInt(s[1].trim()); 
boolean third=Boolean.parseBoolean(s[2].trim()); 
double forth=Double.parseDouble(s[3].trim()); 
char fifth=s[4].charAt(0); 

當你的代碼提示和David說你可以改變眼前這個

name = sc.next();//will read next token 
    age = sc.nextInt(); 
    sex = (sc.next()).charAt(0);//change sex to character for M and F 
    //or //sex = sc.nextInt();//change it to int 
+0

哇謝謝,現在我知道修剪()使用更好.. 但我只是無法得到它的工作,因爲愚蠢的錯誤,我剛剛發現爲什麼大聲笑。 – KaeM

+0

@KaeM太棒了!沒問題,如果我的答案提供解決方案,您可以通過點擊旁邊的勾號來接受我的答案。謝謝。 –

+0

當掃描儀允許您單獨閱讀每個字段時,爲什麼還要使用'split'和'trim'? OP的原始策略比這更好 - 他/她只是不幸地讓方法名稱錯誤。 –

0

第一件事,當我們使用scanner,我們沒有一個叫方法nextString()

所以我們必須使用next()這是讀取字符串。

其次,當你想讀整行,然後使用nextLine(),它將以文本形式讀取整行並將其放入一個字符串中。

現在其被讀取爲entire lineString的可以基於分割字符爲split(假設它是在我們的情況下的空間)

然後得到string arrayparse和每個元件所需的類型。

更好,如果我們在解析時使用try/catch,以便我們可以捕獲輸入的不需要格式的異常並將其引發給用戶。

示例代碼沒有try/catch語句,但您使用的try/catch根據自己的需要

Scanner sc = new Scanner(System.in); 

    System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :"); 
     String input = sc.nextLine(); 

     String[] inputAfterSplit = input.split(" "); 

     String firstParam = inputAfterSplit[0]; 
     int secondParam=Integer.parseInt(inputAfterSplit[1]); 
     boolean thirdParam=Boolean.parseBoolean(inputAfterSplit[2]); 
+0

感謝您的幫助! 我使用了你的變量名,這樣它對我來說會更清晰,非常感謝! – KaeM

+0

其okie..no問題 –

0

重做了這一切,這是代碼的翻拍人有同樣的問題,如礦山,以防萬一.. INT在delcaration應改爲整數

import java.util.Scanner; 
import java.lang.*; 

public class tugas1 
{ 
public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Input number of line :"); 
    int lineNum = sc.nextInt(); 

    String[] name = new String[lineNum]; 
    Integer[] age = new Integer[lineNum]; 
    String[] gender = new String[lineNum]; 

    System.out.println("Please input your name, age, and gender(Male/Female) \n(Separate each line by an enter) :"); 
    for (int i = 0; i < lineNum; i++) 
    { 
     System.out.print("Line " + (i+1) + " : "); 
     name[i] = sc.next(); 
     age[i] = sc.nextInt(); 
     gender[i] = sc.next(); 
    } 

    for (int j = 0; j < lineNum; j++) 
    { 
     if (name[j] instanceof String) 
     { 
      if (age[j] instanceof Integer) 
      { 
       if (gender[j] instanceof String) 
       { 
        System.out.println("Person #" + (j+1) + " is " + name[j] + ", with age of " + age[j] + " years old, and gender " + gender[j]); 
       } 
       else 
       { 
        System.out.println("Gender is missing"); 
       } 
      } 
      else 
      { 
       System.out.println("Age and Gender are"); 
      } 
     } 
     else 
     { 
      System.out.println("Name, Age and Gender are missing"); 
     } 
    } 
} 

}