2017-01-18 25 views
0

我試圖做一個基本的8球計劃,並得到了這一切工作,但我想嘗試改變它,所以如果有人問某些問題有一個預定義回答。不知道爲什麼,這是否與字符串語句不工作

package Main; 

import java.util.Random; 
import java.util.Scanner; 

public class eightBall { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 
     System.out.println("Ask a yes or no question"); 

     String question = input.next(); 

     double rnd = Math.random(); 
     int random = (int)(rnd*10); 
     int numberOfChoices = 5; 

     if(question.equalsIgnoreCase("Will i win the lottery?")){ 
      System.out.println("The almigty 8 ball can not tell you this answer."); 
     }else{ 
      switch(random % numberOfChoices){ 


      case 0: 
       System.out.println("No"); 
       break; 
      case 1: 
       System.out.println("Yes"); 
       break; 
      case 2: 
       System.out.println("Maybe"); 
       break; 
      case 3: 
       System.out.println("Definitely"); 
       break; 
      case 4: 
       System.out.println("Definitely Not"); 
       break; 

      } 
     } 


    } 

} 

我真的不知道爲什麼我的if說法有沒有工作,因爲如果我運行它,並問:「請問我贏了彩票?」,我從那個switch語句的東西。

+1

我的猜測是'question'在最後包含換行符('\ n','\ r'或'\ r \ n',具體取決於操作系統)。如果你用'question.toLower()開始嘗試,會發生什麼?startsWith(「我會贏彩票嗎?」)? –

+0

可能重複:http://stackoverflow.com/questions/22458575/whats-the-difference-between-next-and-nextline-methods-from-scanner-class –

回答

8

next()返回一個字,而不是一整行。

更具體地,它讀取緩衝器中,直到它到達分隔符,默認情況下是一個空間(' ')。

你最終會得到"Will"而不是"Will i win the lottery?"

使用nextLine(),如果你想輸入的整條生產線。

如果您認爲有些東西無法正常工作,請嘗試打印出東西或使用調試器。

+0

但將包含'\ N'爲好,它不會。然後你需要修剪它。 –

+1

@ D.Ataro不,它不會。從[文檔](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine()):「此方法返回當前行的其餘部分,不包括任何在最後的線分隔符。「 – Moira

+0

@D。 Atraro nextLine()方法返回當前行的其餘部分,最後不包括任何行 分隔符。 –

0

應該是String question = input.nextLine();

0

使用此代碼

String question = input.nextLine(); 

而不是

String question = input.next(); 

這是因爲掃描器類的next()方法的。 因此,如果您輸入「我會贏彩票嗎?」,那麼question變量只包含「Will」。它只能保存一個字符串,nextLine()方法用於保存字符串,直到行不結束。

+0

看到兩種方法都可以保持String.But diff是next()保持字符串,直到找不到空格,並且nextLine()不會終止,直到找不到任何轉義字符如'\ n' –

相關問題