【问题标题】:my if statement wont work? speech synthesizer [duplicate]我的 if 语句不起作用?语音合成器 [重复]
【发布时间】:2014-06-24 14:24:59
【问题描述】:

嘿,我用 Java 编写程序,如果你在控制台中输入,然后它会响应计算机实际说话(有声音),我使用的是 FreeTTs 语音合成器。出于某种原因,当我编写以下代码时,它的输出不是我想要的。

import java.util.Scanner;

import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.Voice;

public class TextToSpeech {
    public static void main(String args[]){

         Scanner input = new Scanner(System.in);
         String userInput = input.nextLine();

         if(userInput == "hi"){
         Voice v;
         VoiceManager vm=VoiceManager.getInstance();
         v=vm.getVoice("kevin16");
         v.allocate();
         v.speak("Hey my name is jarvis");
         input.close();
         }else
             System.out.println("you suck try again");
    }

}

【问题讨论】:

  • if(userInput.equals("hi")) { 将正确比较您的字符串。
  • 您永远不应该将字符串与 == 进行比较。使用 .equals() 代替
  • Archer评论背后的原因是==比较只比较两个对象的存储位置。虽然在 Java 中字符串是不可变的,但两个字符串的实际数据位置仍然可能不同。 '.equals' 将检查对象的“内容”而不是存储位置,确保 equals 将返回 true 到您的 if 语句。
  • 谢谢大家,工作完美

标签: java if-statement speech-synthesis freetts


【解决方案1】:

当您比较引用变量(实例中的String 引用变量)时,== 比较运算符会检查它们是否引用同一个对象。例如;

String s = new String("s");
String s2 = "s";
System.out.println(s==s2);

上面输出false,因为ss2在内存中没有引用同一个String对象;

改为使用.equals() 方法来比较您的String 引用是否有意义地相等。例如;

String s = new String("s");
String s2 = "s";
System.out.println(s.equals(s2));

以上输出true

【讨论】:

  • @RhysBuddy - 没问题。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2023-01-23
  • 2018-08-28
  • 2012-11-30
  • 2023-02-06
  • 2022-11-15
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多