2017-01-18 31 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' –

相关问题