A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小转铃 中级黑马   /  2015-9-19 15:17  /  1124 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小转铃 于 2015-9-19 18:56 编辑

老师布置了一个课后作业,我试着写了一个代码,但是其中有一个问题一直想不出解决方法,所以来请教大家
我的这个代码,最后一部分,如果想要索引的数据在数组里有多个,就只会显示第一个,如果在第一个if语句中不加入break,那么无论是否找到索引,都会后面再多打印一句“找不到数据”;
我感觉应该是我写的这个for循环有问题,请问要怎么解决呢,想了一中午了,改来改去一直弄不明白

希望大家能不吝赐教,教教我怎么改
先感谢诸位!


-------------------------------------------------------------------------------------------------------------------------------------------结合了回复后终于想出了解决方法,问题已解决
  1. /*8、需求:
  2.      1、键盘录入数组长度
  3.      2、键盘录入数组的每个元素
  4.      3、打印数组
  5.      4、键盘录入查找数据
  6.      5、返回查找数据的索引
  7. */
  8. import java.util.Scanner;
  9. class demo_ex1 {
  10.         public static void main(String[] args){
  11.                 System.out.print("请输入数组长度:");
  12.                 Scanner sc = new Scanner(System.in);
  13.                 int x = sc.nextInt();
  14.                 if(x>0){
  15.                 int[] arr = new int[x];
  16.                 for(int i=0;i<x;i++){
  17.                         System.out.print("请输入数组第"+(i+1)+"位数"+":");
  18.                         arr[i] = sc.nextInt();}
  19.                 for(int i=0;i<arr.length;i++){
  20.                 System.out.println(arr[i]);}
  21.                
  22.                 System.out.print("请输入需要查找数组索引的数据:");
  23.                 int search = sc.nextInt();

  24.         int a =0;                                                                         //加入了一个变量判断是否找到索引数据
  25.                 for(int i=0;i<arr.length;i++){
  26.                         if(arr[i]==search){
  27.                                 a++;                                                                                //找到了索引数据后,变量自增,这个变量写成boolean类型应该更好,不过差不多
  28.                            System.out.println("该数据的索引是:"+i);               
  29.                            }
  30.                          else {
  31.                                 if(a==0&&i==arr.length-1){
  32.                                 System.out.println("找不到数据");
  33.                                 }else{
  34.                                 }
  35.                                
  36.                          }
  37.                        

  38.                         }}
  39.                 else
  40.                         System.out.println("长度不合法");
  41.                
  42.                           
  43.                           
  44.                            }
  45.                            }
  46.                
复制代码

  1. /*8、需求:
  2.      1、键盘录入数组长度
  3.      2、键盘录入数组的每个元素
  4.      3、打印数组
  5.      4、键盘录入查找数据
  6.      5、返回查找数据的索引
  7. */
  8. import java.util.Scanner;
  9. class demo_ex1 {
  10.         public static void main(String[] args){
  11.                 System.out.print("请输入数组长度:");
  12.                 Scanner sc = new Scanner(System.in);
  13.                 int x = sc.nextInt();
  14.                 if(x>0){
  15.                 int[] arr = new int[x];
  16.                 for(int i=0;i<x;i++){
  17.                         System.out.print("请输入数组第"+(i+1)+"位数"+":");
  18.                         arr[i] = sc.nextInt();}
  19.                 for(int i=0;i<arr.length;i++){
  20.                 System.out.println(arr[i]);}
  21.                
  22.                 System.out.print("请输入需要查找数组索引的数据:");
  23.                 int search = sc.nextInt();
  24.                 for(int i=0;i<arr.length;i++){
  25.                         if(arr[i]==search){
  26.                            System.out.println("该数据的索引是:"+i);break;
  27.                            }
  28.                          else if(arr[i]!=search&&i==arr.length-1){
  29.                                 System.out.println("找不到数据");
  30.                          }
  31.                         

  32.                         }}
  33.                 else
  34.                         System.out.println("长度不合法");
  35.                
  36.                            
  37.                            
  38.                            }
  39.                            }
  40.                
复制代码







6 个回复

倒序浏览
  1. import java.util.Scanner;

  2. /**
  3. * 需求:
  4. * 1、键盘录入数组数组的长度
  5. * 2、键盘录入数组中的每个元素
  6. * 3、打印数组
  7. * 4、键盘录入查找数组
  8. * 5、返回查找数据的索引
  9. * @author Adam
  10. *
  11. */
  12. public class Test3 {

  13.         public static void main(String[] args) {
  14.                 Scanner sc1 = new Scanner(System.in);
  15.                 Scanner sc2 = new Scanner(System.in);
  16.                 Scanner sc3 = new Scanner(System.in);
  17.                
  18.                 System.out.print("输入数组长度:");
  19.                 int length = sc1.nextInt();
  20.                 System.out.println("输入数组中的每个元素:");
  21.                
  22.                 String str = sc2.nextLine();
  23.                 String[] arr = str.split(" ");
  24.                 for(String s:arr)
  25.                         System.out.println(s);
  26.                 System.out.println("录入您需要查找的数组元素");
  27.                 String slook = sc3.nextLine();
  28.                 for(int i=0;i<arr.length;i++)
  29.                 {
  30.                         if(arr[i].equals(slook))
  31.                                 System.out.println(i);
  32.                                
  33.                 }
  34.         }

  35. }
复制代码


回复 使用道具 举报
本帖最后由 fmi110 于 2015-9-19 16:29 编辑

System.out.println("该数据的索引是:"+i);break;

break;是跳出循环,你把break 换成 continue 就可以,
遇到continue 是继续执行下一个循环,本次循环continue后的语句将被跳过运行结果
  1. 请输入数组长度:5
  2. 请输入数组第1位数:1
  3. 请输入数组第2位数:2
  4. 请输入数组第3位数:3
  5. 请输入数组第4位数:4
  6. 请输入数组第5位数:1
  7. 1
  8. 2
  9. 3
  10. 4
  11. 1
  12. 请输入需要查找数组索引的数据:1
  13. 该数据的索引是:0
  14. 该数据的索引是:4
复制代码


回复 使用道具 举报
fmi110 发表于 2015-9-19 16:25
System.out.println("该数据的索引是:"+i);break;

break;是跳出循环,你把break 换成 continue 就可以,

我试了一下,你的解决方法好像不行,换成continue的话虽然找到了多个索引,但会多打印一次“找不到数据”,不过我找到解决方法了,我加了一个临时变量用来判断是否找到数据,不过还是谢谢你啦

  1.         int a =0;
  2.                 for(int i=0;i<arr.length;i++){
  3.                         if(arr[i]==search){
  4.                                 a++;
  5.                            System.out.println("该数据的索引是:"+i);
  6.                            }
  7.                          else {
  8.                                 if(a==0&&i==arr.length-1){
  9.                                 System.out.println("找不到数据");
  10.                                 }else{
  11.                                 }
  12.                                
  13.                          }
  14.                        

  15.                         }}
  16.                 else
  17.                         System.out.println("长度不合法");
复制代码
回复 使用道具 举报

不好意思,你的代码运行结果不对啊,而且我们还没学到面向对象,也没学到.equeals()这个方法,不过谢谢啦
回复 使用道具 举报
学习。。。。。。。。。。。
回复 使用道具 举报
fmi110 高级黑马 2015-9-19 19:45:20
7#
小转铃 发表于 2015-9-19 18:37
我试了一下,你的解决方法好像不行,换成continue的话虽然找到了多个索引,但会多打印一次“找不到数据” ...

对的,需要添加一个变量做标志
我举了列子刚好末尾是符合的,所以没打印“找不到数据”,没注意不过一般来说  单次符合要求 用 break  多次符合用continue   

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马