首页 > 解决方案 > 为什么我的数组中的数据没有被正确评估?

问题描述

在此循环中,即使条件满足,它也不会进入第二个和第三个 if 语句!

基本上我想要的是根据他们的信息找到人的名字,我已经创建了数组,并且会有相应的卷号和别针以及他们的名字,我使用文本字段进行输入并将其存储在另一个名为的数组中对,现在当我尝试从该数组中获取信息时,它没有像输入 n 3 1 那样给出正确的输出,它必须给出输出 nandini 但它没有发生。

即使 arr[0][1] 等于 3 它也没有进入 if 语句。我也尝试了 '$para[]' 而不是 para[] 但我仍然无法获得预期的输出..

   import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
      
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
           
            primarySwatch: Colors.deepPurple,
          ),
          home: MyHomePage(
              title:
                  '                                                                                           HELLO AM SRUJITH CHAITHANYA'),
        );
      }
    }
    
    TextEditingController _next = TextEditingController();
    
    var arr = [
      [ 
        //roll numbers
        1,
        3,
        8,
        1,
        8
      ],
      [
        //pin
        0,
        1,
        2,
        4,
        2
    
      ],
      [
        //name
        'Srujith',
        'nandini',
        'pratheek',
        'rachana',
        'avani'
      ],
    ];
    
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key? key, required this.title}) : super(key: key);
      
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    var para = [];
    var i = 0;
    
    class _MyHomePageState extends State<MyHomePage> {
      var qi = 0;
      var change;
      var operator;
      var operato;
      var result;
      var fname;
      var f;
      void answer() {
        setState(() {
          qi = qi + 1;
          i = i + 1;
          change = _next.text;
          operator = change;
          para.add(operator);
          _next.text = '';
          
          setState(() {});
        });
        if(i==3){
       for(int o=0;o<5;o++){
         f = arr[2][o];
          fname = f.substring(0, 1);
           if(para[0]==fname){
             result = 'named';
             if(para[1]==arr[0][o]){
               result = 'rolled';
               if(para[2]==arr[1][o]){
    
                 result = arr[2][o];
                 break;
               }
             }
           }
       }
        }
    
    
      }
    
      @override
      Widget build(BuildContext context) {
       
        var questions = [
         
          'What is the first letter of your name?',
          'What is your roll number?',
          'What is your pin?',
          'question 4'
        
        ];
        return Scaffold(
          drawer: Drawer(
            child: null,
          ),
          appBar: AppBar(
            
            title: Text(widget.title),
            elevation: 0,
          ),
          body: Container(
            decoration: BoxDecoration(
              image: DecorationImage(
                  image: NetworkImage(
                      'https://th.bing.com/th/id/R.5ffeb9b88264485f1b265ff3c94e2dc2?rik=q1VHggJH5dpvmQ&riu=http%3a%2f%2fthewowstyle.com%2fwp-content%2fuploads%2f2015%2f01%2fnature-image.jpg&ehk=1zrBUw2Jkcik7R719ZPnOjG8MrGPNepNGF1KdErFfw4%3d&risl=&pid=ImgRaw&r=0'),
                  fit: BoxFit.cover),
            ),
            child: Center(
              
              child: Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                
                  Text(
                    questions[qi],
                    style: Theme.of(context).textTheme.headline2,
                  ),
    
                  Container(
                    width: 0.5 * MediaQuery.of(context).size.width,
                    child: TextFormField(
                      controller: _next,
                       // keyboardType: TextInputType.number,
                    ),
                  ),
    
                  Text(
                    ('$result'),
                    style: Theme.of(context).textTheme.headline2,
                  ),
                  Text(
                    ('$i'),
                    style: Theme.of(context).textTheme.headline2,
                  ),
                  
                  Text(
                    ('$para'),
                    style: Theme.of(context).textTheme.headline2,
                  ),
                  ElevatedButton(
                    child: Text('answer'),
                    onPressed: answer,
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }

标签: flutterdart

解决方案


尝试使用 if-else-if 而不是单个 if 语句:

for(int o=0;o<5;o++){
     f = arr[2][o];
      fname = f.substring(0, 1);
       if(para[0]==fname)
         result = 'named';
        else if(para[1]==arr[0][o])
         result = 'rolled';
        else if(para[2]==arr[1][o])
         result = arr[2][o];
        else 
         return 0; 
}

ps:也可能是因为你没有添加正确的{}


推荐阅读