// 这段代码意图要user输入一个不小于30的整数,并对潜在的error input做出反应import java.util.*;
public class a {
   public static void main (String[] args) {
      Scanner in = new Scanner(System.in);
      int maxWidth;
      boolean isIntegerMoreThan30 = true;
      do {
         String max_width;
         System.out.print("Enter max width (at least 30): ");
         max_width = in.next();
         if ((max_width.length() == 0)||(max_width == null)) {
            System.out.println(" - error: invalid input value.");
            isIntegerMoreThan30 = false;
            continue;
         }
         for (int index = 0; index < max_width.length(); index++) {
            if (((int)max_width.charAt(index) < 48) || ((int)max_width.charAt(index) > 57)) {
               System.out.println(" - error: invalid input value.");
               isIntegerMoreThan30 = false;
               break;
            }
         }
         if (isIntegerMoreThan30) {
            maxWidth = Integer.parseInt(max_width);
            if (maxWidth < 30) {
               System.out.println(" - error: invalid input value.");
               isIntegerMoreThan30 = false;
            }
         }
      }while (!isIntegerMoreThan30);
   System.out.print(maxWidth);
   }
}// compile 的结果是 variable maxWidth might not have been initialized
//                  System.out.print(maxWidth);

解决方案 »

  1.   

    maxWidth没有初始化
    int maxWidth; 改为 int maxWidth = 0;
      

  2.   

    但是我在do-while loop里面有赋值啊?
      

  3.   

    p.s.打急了,修正一个错误,应该是:
           boolean isIntegerMoreThan30; 
          do { 
             String max_width;
             isIntegerMoreThan30 = true; // add one line
             ......
    我就是没弄明白,在do-while loop里面,所有没有赋值的情况都会导致loop再次运行,只有当被赋值了之后才能往下走,为什么必须要在之前加上一句maxWidth = 0呢?