没有调用静态方法

时间:2010-12-31 19:36:34

标签: java static-methods

我正在尝试在此类中调用静态方法(printABC()),但它无效。

如果我取消注释标记为T_T(1和2)的两条线,它就可以了!为什么只有一条线路失败?

import java.util.Scanner;

class pro0009 {
   static Scanner in = new Scanner(System.in);
   static int A,B,C;

   static void printABC(){
      String ABC = in.nextLine(); 

      ABC=ABC.replace("A"," "+A+" ");
      ABC=ABC.replace("B"," "+B+" ");
      ABC=ABC.replace("C"," "+C+" ");

      //System.out.print(ABC.substring(1));
      System.out.print(ABC);
   }

   public static void main(String[] args){
      int x = in.nextInt(); //1
      int y = in.nextInt(); //2
      int z = in.nextInt(); //3


      if(x<y){//1<2
         if(x<z){ //1<3
            if(y<z){//x<y<z 2<3
               //1<2<3
               A=x;
               B=y;
               C=z;
               printABC();//T_T 1
               System.out.println("Here");
               //pro0009.printABC();//T_T 2
               //System.out.println("Here2");
            }else{ //x<z<y
               A=x;
               B=z;
               C=y;

            }
         }else{//z<x<y
            A=z;
            B=x;
            C=y;

         }
      }else{//y<x
         if(y<z){
            if(x<z){//y<x<z
               A=y;
               B=x;
               C=z;

            }else{//y<z<x
               A=y;
               B=z;
               C=x;

            }
         }else{//z<y<x
            A=z;
            B=y;
            C=x;

         }
      }
   }

}

3 个答案:

答案 0 :(得分:1)

T_T 1消耗输入的行。 in.nextLine()在T_T 2的缓冲区中没有任何内容,因此它正在等待输入。

答案 1 :(得分:0)

因为您在另一个静态方法中调用静态方法,所以这不应该导致问题。问题应该在于程序的逻辑。请提供有关您尝试实施的功能的更多详细信息。

答案 2 :(得分:0)

程序开头的三个nextInt不会吃行终止符。第一次调用nextLine时,它会读取此终结符的输入并返回空字符串。所以第一个printABC也打印出空字符串。当第二次调用nextLine时,它会读取输入中的下一行,这是您所期望的。

要解决此问题,您只需在nextLine中拨打printABC两次,忽略第一次通话的结果,因为它应该始终为空。