-4

我是java和android开发的新手。我正在开发这个非常基本的 4x4 数独应用程序,其中我试图根据游戏编号显示一些文本值。但是,在运行时 EditText 字段中的文本显示为空白。

下面是 onCreate() 中的代码

    a=gamenumber(); //returns a random game number
    displayrandommatrix(a); 
    findviewbyidfunc();

下面是在 EditText 中显示值的示例代码

           public void displayrandommatrix(int n)
            {
            switch(n)
            {
            case 1:
        r11.setText("2");
        r12.setText("3");
        r23.setText("3");
        r24.setText("2");
        r32.setText("4");
        r33.setText("2");
        r41.setText("1");
        r44.setText("3");
        break;
            case 2:
        r12.setText("2");
        r13.setText("4");
        r21.setText("1");
        r24.setText("3");
        r31.setText("4");
        r34.setText("2");
        r42.setText("1");
        r43.setText("3");
        break;
               }

这是我用于随机游戏编号的代码。

              public int gamenumber()
            {
        int b=randint.charAt(r.nextInt(randint.length()));
        return b;       
            }

         public void findviewbyidfunc()
       {
    checksol=(Button)findViewById(R.id.checksol1);
    r11=(EditText)findViewById(R.id.row1col1);
    r21=(EditText)findViewById(R.id.row2col1);
    r31=(EditText)findViewById(R.id.row3col1);
    r41=(EditText)findViewById(R.id.row4col1);
      }

Logcat 错误列表: 10-21 06:15:12.564: E/AndroidRuntime(1467): 致命异常: main 10-21 06:15:12.564: E/AndroidRuntime(1467): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com. example.sudokunew/com.example.sudokunew.Level2_play}:java.lang.NullPointerException 10-21 06:15:12.564:E/AndroidRuntime(1467):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 10 -21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app .ActivityThread.access$600(ActivityThread.java:141) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 10-21 06: 15:12.564: E/AndroidRuntime(1467): 在 android.os.Handler.dispatchMessage(Handler.java:99) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.os.Looper.loop(Looper.java:137) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在android.app.ActivityThread.main(ActivityThread.java:5103) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 java.lang.reflect.Method.invokeNative(Native Method) 10-21 06:15 :12.564: E/AndroidRuntime(1467): at java.lang.reflect.Method.invoke(Method.java:525) 10-21 06:15:12.564: E/AndroidRuntime(1467): at com.android.internal。 os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 10-21 06:15:12.564: E/AndroidRuntime(1467): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10 -21 06:15:12.564: E/AndroidRuntime(1467): at dalvik.system.NativeStart.main(Native Method) 10-21 06:15:12.564: E/AndroidRuntime(1467): Caused by: java.lang. NullPointerException 10-21 06:15:12.564:E/AndroidRuntime(1467): 在 com.example.sudokunew.Level2_play.displayrandommatrix(Level2_play.java:177) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 com.example.sudokunew.Level2_play.onCreate (Level2_play.java:26) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.Activity.performCreate(Activity.java:5133) 10-21 06:15:12.564: E/AndroidRuntime (1467): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 10-21 06:15:12.564: E/AndroidRuntime(1467): ... 11 更多26) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.Activity.performCreate(Activity.java:5133) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 10-21 06: 15:12.564: E/AndroidRuntime(1467): ... 11 更多26) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.Activity.performCreate(Activity.java:5133) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 10-21 06:15:12.564: E/AndroidRuntime(1467): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 10-21 06: 15:12.564: E/AndroidRuntime(1467): ... 11 更多

4

5 回答 5

0

要生成随机数,请使用以下代码行

static Random ran1=new Random();
static int ranInt1;
ranInt1= ran1.nextInt(9)+1;
于 2013-10-21T10:08:13.777 回答
0

首先 findviewbyidfunc() 应该在 displayrandommatrix(a) 函数之上。只有这样它才会获得 EditText 的资源 id。

我认为它可能会显示这些值。如果 displayrandommatrix(a) 高于 findviewbyidfunc(),它也会根据您的代码给出异常,因为 displayrandommatrix(a) 方法没有编辑文本的 id

其次,将上面的findviewbyidfunc()移动后,通过调试检查随机数是否是switch case编号中的数字,否则在switch case中不去则什么都不会显示。

于 2013-10-21T10:11:26.113 回答
0

你的问题不是很好,不清楚你需要什么,也不清楚问题应该出在哪里:随机生成器功能?还是 findViewById 函数?对于随机生成器,我建议使用内置 Java 代码:

Random rand = new Random(); //initialize this only one time, at the beginning, in the onCreate() method of your activity.    
int a = rand.nextInt(MAX_VALUE);

对于 findViewById 函数,您是否像这样完成了所有调用?

r11 = (EditText)findViewById(R.id.R11_ID);
r12 = (EditText)findViewById(R.id.R12_ID);
r13 = (EditText)findViewById(R.id.R13_ID);
... and so on
于 2013-10-21T10:00:46.670 回答
0

switch case 可能是问题所在,如果不处理适当的情况,它可能会遇到默认情况。使用适当的代码将默认大小写放在 switch 中。

喜欢

default:
    r11.setText("2");

    r12.setText("3");
    r23.setText("3");
    r24.setText("2");
    r32.setText("4");
    r33.setText("2");
    r41.setText("1");
    r44.setText("3");
于 2013-10-21T10:06:00.817 回答
0

EditTexts 有一个可以设置的 Hint 元素。这是显示用户是否没有输入他自己的任何文本的文本。

于 2013-10-21T10:00:29.950 回答