2013-04-16 2 views
0

Visual Basic에서 Steel on Sapphire on Steel을 사용하여 Ruby 언어를 사용하여 코드를 컴파일하고 실행합니다. 나는 학교 프로젝트를 위해 블랙 잭 프로그램을 만들고 있는데, 어떤 이유로 든 내가 만든 루프에서 정확하게 길을 찾을 수 없다. Loop는 코드를 계속 실행하여 사용자에게 히트 또는 스탠드를 원하는지 여부를 묻고 사용자 입력을 기반으로 히팅을 계속할지 또는 서 있을지 여부를 결정합니다. 모든 조언을 부탁드립니다. 시간 내 주셔서 감사합니다.내 루프에 갇혀 있는데 어떻게 나갈 수 있습니까?

while choice != "stand" 

        #This is the loop that I can not find my way out of 
     while choice != "hit" || choice != "stand" 

      puts "Would you like to hit or stand?" 
      choice = gets.chomp! 
      choice.downcase 

      if choice == "hit" 
       puts "You have chosen to hit \n\n" 
       player.drawCard(myDeck) 
       puts "Player's Hand: \n" 
       player.showHand() 
       puts "\n" 
       puts "Player Score: \n" 
       player.determineScore() 
       puts player.printScore() 
       puts "\n \n" 
      elsif choice == "stand" 
       puts "You have chosen to stand \n\n" 
       puts "Player's Hand: \n" 
       player.showHand() 
       puts "\n" 
       puts "Player Score: \n" 
       player.determineScore() 
       puts player.printScore() 
       puts "\n \n" 
      else 
       puts "Your choice is not acceptable please choose again" 
      end 

     end 
+2

'||'대신'&&'를 사용하십시오. – JJJ

답변

0

A || A가 참이거나 B가 참이면 B는 참을 리턴합니다.

당신의 선택은 '히트'경우 코드가 될 것이다 : 물론 사실이다

while false || true 

while false || choice != 'stand' 

는 평가합니다.

은 당신의 상태를 변경

:

while !(choice=='hit' || choice=='stand') 

당신의 문제는 멀리 가야한다.

+0

도와 주셔서 감사합니다! – user1457104

2

이 항상 true가됩니다 :

choice != "hit" || choice != "stand" 

대신 사용 & & : 다른 사람들이 지적했듯이

choice != "hit" && choice != "stand" 
1

, 당신의 while 조건이 항상 true를 반환합니다. 그들의 대답은 적절하게 상태를 변경하도록 권장합니다.

그러나 코드를 더 읽기 쉽게하려면 과 같은 until을 사용하는 것이 좋습니다.

until choice == "hit" || choice == "stand" 
    # Code 
end 

이렇게하면 코드가 더 읽기 쉽고 "Rubyish"가됩니다.

또 다른 옵션은 Array#include?입니다. 선택 항목을 제공하고 플레이어가 그 중 하나를 선택했는지 확인할 수 있습니다.

until ['hit', 'stand'].include? choice 
    # Code 
end 

이 옵션은 처음에는 약간 읽기가 쉽지만 선택 사항을 더 추가하려면 유지 관리가 쉽습니다.

관련 문제