【问题标题】:An error in my codes. I cant find that我的代码中有错误。我找不到那个
【发布时间】:2015-01-28 09:07:36
【问题描述】:
import java.io.*;
import java.util.Scanner;


public class Helloworld{
public static BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

public static void main(String[]args) throws IOException{

    System.out.print('\u000C');
    //variables
     String lev,tower,disk;
     int [] slot;
     slot= new int [9];

     slot[0]=1;
     slot[3]=2;
     slot[6]=3;



  System.out.println("Press enter to continue...");
  Scanner keyboard = new Scanner(System.in);
  keyboard.nextLine();
  System.out.print('\u000C');        
    System.out.println("Select Levels:");
    System.out.println("[1]Level 1 <3 numbers>");
    System.out.println("[2]Level 2 <4 numbers>");
    System.out.println("[3]Level 3 <5 numbers>");
    System.out.println("[4]Instructions");
    System.out.print("Choose one: ");
    lev =(input.readLine());

 if (lev.equals("4")){

        System.out.println("* You must transfer all numbers from tower 1 - tower 3 in ascending order.");
        System.out.println("* For every move you can only move one number to    a certain.");
        System.out.println("* The number on the top of the tower are the one       that you can move only.");

 }


else if (lev.equals("1")){
  //loop
while (true) {
System.out.print('\u000C');
 //display
System.out.println("  A  ,  B  ,  C  ");
System.out.println("| " +slot[0]+ "  |  " +slot [1]+  "  |  " +slot[2]+ "  |");
System.out.println("| " +slot[3]+ "  |  " +slot [4]+  "  |  " +slot[5]+ "  |");
System.out.println("| " +slot[6]+ "  |  " +slot [7]+  "  |  " +slot[8]+ "  |");
// input a disk for user
System.out.println("What number do you want to move <1, 2, 3, e to exit>:      ");
disk = (input.readLine());
if (disk.equals("e")) {
    break;
}
// input tower where the disk will contain.
System.out.println("What tower do you want to put <A, B, C>: ");
tower = (input.readLine());
   // Possible moves for user
if (disk.equals("1") && tower.equals("b")){
    slot[7]=slot[0]; 
    slot[0]=0;
    System.out.println("Hello");
}
else if (disk.equals("2") && tower.equals("c")){
    slot[8]=slot[3]; slot[3]=0;
}
if (disk.equals("3") && tower.equals("b")){
    slot[5]=slot[7]; slot[7]=0;
}
else if (disk.equals("1") && tower.equals("b")){
    slot[5]=slot[4]; slot[4]=0;
}
 else if (disk.equals("1") && tower.equals("a")){
    slot[6]=slot[5]; slot[5]=0;
}
else if (disk.equals("2") && tower.equals("b")){
    slot[4]=slot[8]; slot[8]=0;
}
else if (disk.equals("2") && tower.equals("a")){
    slot[2]=slot[6]; slot[6]=0;
}
else if (disk.equals("1") && tower.equals("a")){
    slot[3]=slot[4]; slot[4]=0;
}//
else if (disk.equals("1") && tower.equals("b")){
    slot[2]=slot[6]; slot[6]=0;
}
else if (disk.equals("3") && tower.equals("c")){
    slot[8]=slot[7]; slot[7]=0;
}
else if (disk.equals("1") && tower.equals("b")){
    slot[7]=slot[3]; slot[3]=0;
}
else if (disk.equals("2") && tower.equals("c")){
    slot[5]=slot[6]; slot[6]=0;
}
else if (disk.equals("1") && tower.equals("c")){
    slot[2]=slot[7]; slot[7]=0;
}
}
}
}
}

我不知道是什么错误。我不能把 1 放在 2 的顶部。当我把 1 放在 2 的顶部时,2 变成 0。那是河内的塔。我想创建一个名为塔河内的游戏。我想让用户选择他/她想要移动的东西。这是第一个输入。第二个输入是我想用户他/她想放什么塔。

【问题讨论】:

  • 虽然 goto 关键字是保留的,但没有实现。你谈论一个循环,但我在你的代码中看不到任何循环
  • 看这个:http://www.aboutcodes.com/2012/07/goto-statement-in-java-with-example.html
  • 使用循环 while, do..while.
  • 方法调用、中断、返回语句……当然,还知道如何使用它们。

标签: java bluej towers-of-hanoi


【解决方案1】:

永远不要使用 GOTO!

如果我对您的理解正确,您希望在每一步后提示用户输入新的内容。所以你会想把它放在一个循环中

类似

while(continueProgramm){
    System.out.println("What number do you want to move <1, 2, 3>: ");
    disk =(input.readLine());
    System.out.println("What tower do you want to put <A, B, C>: ");
    tower =(input.readLine());

   //handle your input here ...
}

【讨论】:

  • “永远不要使用 GOTO!” 没有 goto 的错误恢复会是什么样子。像所有强大的工具一样,它很容易被误用,但如果使用得当,它非常强大,是的,我什至有时在 Java 中想念它。
  • 哦,好的。我明白。非常感谢兄弟。 :)
【解决方案2】:
while (condition) {

  top:

  System.out.print('\u000C');
  System.out.println("  A  ,  B  ,  C  ");
  System.out.println("| " +slot[0]+ "  |  " +slot [1]+  "  |  " +slot[2]+ "  |");
  System.out.println("| " +slot[3]+ "  |  " +slot [4]+  "  |  " +slot[5]+ "  |");
  System.out.println("| " +slot[6]+ "  |  " +slot [7]+  "  |  " +slot[8]+ "  |");

  middle:

  System.out.println("What number do you want to move <1, 2, 3>: ");
  disk = (input.readLine());
  System.out.println("What tower do you want to put <A, B, C>: ");
  tower = (input.readLine());

  // First Move 
  if(disk.equals("1") && tower.equals("b")) {
    slot[0] = slot[8];
    // use continue skip the rest code
    // continue top;
    // if you want goto top, continue and continue top is same
    continue;
    // if you want goto middle, you can use the label
    // continue middle;
  }

  // some other code
}

你可以在循环中正确使用标签,而不是转到,例如上面的代码

【讨论】:

    【解决方案3】:

    正如 fge 所说,goto 是 Java 中的保留字,但未实现。在大多数语言中,使用goto 通常被认为是不好的编程习惯。你应该使用一个循环。带有中断条件的无限 while 循环就足够了:

    while (true) {
        System.out.print('\u000C');
        System.out.println("  A  ,  B  ,  C  ");
        System.out.println("| " +slot[0]+ "  |  " +slot [1]+  "  |  " +slot[2]+ "  |");
        System.out.println("| " +slot[3]+ "  |  " +slot [4]+  "  |  " +slot[5]+ "  |");
        System.out.println("| " +slot[6]+ "  |  " +slot [7]+  "  |  " +slot[8]+ "  |");
    
        System.out.println("What number do you want to move <1, 2, 3, e to exit>: ");
        disk = (input.readLine());
        if (disk.equals("e")) {
            break;
        }
    
        System.out.println("What tower do you want to put <A, B, C>: ");
        tower = (input.readLine());
    
        // First Move 
        if (disk.equals("1") && tower.equals("b")) {
            slot[0] = slot[8];
        }
    }
    

    【讨论】:

      【解决方案4】:

      在 continue 语句中使用 while 循环。

      if(disk.equals("1") && tower.equals("b")) {
          slot[0] = slot[8];
      continue;
      }
      

      【讨论】:

      • if(disk.equals("1") && tower.equals("b")) { slot[0] = slot[8];继续; }
      • 你有什么理由不只是用代码发布你的答案?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      相关资源
      最近更新 更多