8-2 作业给大家一个标准的答案吧

8-2 作业给大家一个标准的答案吧

感觉做的比较麻烦

算是全符合需求  

感觉代码偏多



import java.util.Scanner;

public class Sad {

//显示提示信息

public void notice(){

System.out.println("*********************************");

   System.out.println("     1--插入数据");

   System.out.println("     2--显示所有数据");

   System.out.println("     3--指定位置处插入数据");

   System.out.println("     4--查询能被3整除的数据");

   System.out.println("     0--退出");

   System.out.println("*********************************");

   System.out.println("请输入对应的数字进行操作"); 

}

//插入数据

public int [] insetDate(){

   int[] a=new int[10];

   Scanner sc=new Scanner(System.in);

    for(int i=0;i<a.length-1;i++){

    System.out.println("请输入第"+(i+1)+"个数据");

    int n=sc.nextInt();

    if(n==0){

    System.out.println("数据不能为0,请重新输入");

    i--;

    continue;

    }

    a[i]=n;

    }   

System.out.println("数组中的元素为");

for(int x:a){

if(x!=0){

System.out.print(x+" ");

}else{

continue;} 

}

System.out.println();

return a;

}

//显示所有数据

public void showDate(int[] a,int length){

System.out.println("数组中的元素为");

for(int x:a){

if(x!=0){

System.out.print(x+" ");

}else{

continue;}  

}

System.out.println();

}

//在指定位置插入数据

public void insetAtArray(int[] a,int n,int k){

Scanner sc=new Scanner(System.in);

System.out.println("请输入插入的数字");

for(int i=0;i<1;i++){

n=sc.nextInt();

  if(n==0){

System.out.println("插入的数字不能为0,请重新输入");

    i--;

    continue;

}

}

System.out.println("请输入插入的位置");

k=sc.nextInt();

for(int i=a.length-1;i>k;i--){

a[i]=a[i-1];

}

  a[k]=n;  

  System.out.println("数组中的元素为");

for(int x:a){

  if(x!=0){

  System.out.print(x+" ");

  }else{

  continue;}    

  }

  System.out.println();

}

//查询能被3整除的数据

public void divThree(int[] a){

System.out.println("能被3整除的数为");

int i=0,j=0;

for(int x=0;x<a.length;x++){

if(a[x]!=0){

if(a[x]%3==0){

System.out.print(a[x]+" ");

}else{

i++;

}

if(i==a.length){

System.out.println("没有能被3整除的数");

}

}

if(a[x]==0){j++;

}

if(j==a.length){

System.out.println("没有能被3整除的数");

}

}

System.out.println();

}

public static void main(String[] args) {

   Sad sa=new Sad();

   boolean flag=true;

   Scanner sc=new Scanner(System.in);

   int[] a=new int[10];

   while(flag){

  sa.notice();

  int n=sc.nextInt();

  switch(n){

   case 1: a=sa.insetDate();break;

   case 2: sa.showDate(a, n);break;

   case 3: sa.insetAtArray(a, n, n);break;

   case 4: sa.divThree(a);break;

   case 0:System.out.println("程序结束");

          flag=false;

          break;

   default:System.out.println("请重新输入");

  }

   }

}

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
qq_林二爷_0 2017-12-17 17:20:14

大佬们,请问那个insertData里面的数组元素怎么传到showData里面的

  • 数组是 引用类型,直接传数组的引用过去,方法里面对数组的更好直接影响原数组元素值
    2018-07-01 18:34:52
咸鱼大侠 2017-12-12 09:46:18

请问

public void insertAtArray(int[] a, int n, int k) {
        if (k == 9)
            a[9] = n;
        if (k >= 1 && k <= 8) {
            for (int i = 9; i > k - 1; i--) {
                a[i] = a[i - 1];
            }
            a[k] = n;
        }
        for (int j : a) {
            System.out.print(j + "   ");
        }
    }

这一段要怎么理解

  • 当要插入的位置是数组最后一个位置时,直接将要插入的数据赋值到数组的最后一个位置;当要插入的位置不是数组的最后一个位置时,要从数组的最后一个元素开始到要插入的位置处的元素结束,从后往前依次将元素后移一位,最后将要插入的数据赋值到指定位置。最后用for循环输出数组中的所有元素。
    2017-12-12 10:36:17
  • a[9]就是第十个数据,直接赋值就行,如果k!=9那么从k往后所有元素依次调换,然后再给a[k]赋值
    2017-12-12 12:11:46
  • 好的 谢谢你这么用心的回答
    2017-12-12 14:15:20
未知数X 2017-09-26 23:20:29

我个人觉得你的插入数据的这个方法是需要完善的,运行起来和视频要实现的结果有一定的差异,每次要准备要运行插入的数据选择时候选择数字3以后 在选择要插入的位置 不管任何位置都会是插入值为3的数据 我个人觉得这个应该是这样写:

public void inertAtArry(int[] a, int n, int k){
       System.out.println("请输入要插入的数据");
       Scanner sc = new Scanner(System.in);
       n =sc.nextInt();
       System.out.println("请输入插入的位置");
       Scanner scc = new Scanner(System.in);
       k=scc.nextInt();
       for(int i = a.length-1; i > k;i--){
           a[i] = a[i-1];
       }
       a[k] = n;
      System.out.println("数组中的元素为");
       for(int x:a){
       if(x!=0){
           System.out.print(x+" ");
       }else{
           continue;}
   }

未知数X 2017-09-26 00:17:46

public void insetAtArray(int[] a,int n,int k){

Scanner sc=new Scanner(System.in);

System.out.println("请输入插入的数字");

for(int i=0;i<1;i++){

n=sc.nextInt();

  if(n==0){

System.out.println("插入的数字不能为0,请重新输入");

    i--;

    continue;

请问这个i--起到什么作用呢?

  • 提问者 风暴舞者 #1
    因为你输入的是0 因为设定参数不能为0 所以 变量i-- 重新输入
    2017-09-26 00:27:40
  • 提问者 风暴舞者 #2
    用for循环的时候i已经自增了所以说 当输入为0的时候 i已经++了 因为要重新输入所以说i要--
    2017-09-26 00:29:47
Jerbiner 2017-09-23 09:54:22

谢谢你的分享,我也分享我的。

package com.project;

/**
 * 
 * @author Jerbiner
 * @version 1.0
 */
import java.util.Scanner;

public class Practice {
	public void notice() {
		System.out.println();
		System.out.println("**********************************");
		System.out.println("        1-插入数据");
		System.out.println("        2-显示所有数据");
		System.out.println("        3-在指定位置处理插入数据");
		System.out.println("        4-查询能被3整除的数据");
		System.out.println("        0-退出");
		System.out.println("**********************************");
		System.out.println("请输入对应数字进行操作:");
	}

	public void insertData(int[] arr) {
		for (int i = 0; i < 9; i++) {
			System.out.println("请输入第" + (i + 1) + "个数据");
			Scanner input = new Scanner(System.in);
			arr[i] = input.nextInt();
		}
		for (int i=0;i<9;i++) {
			System.out.print(arr[i] + "   ");
		}
	}

	public void showData(int[] a) {
		for (int i=0;i<10;i++) {
			if(a[i]!=0)
				System.out.print(a[i] + "   ");
		}
	}

	public void insertAtArray(int[] a, int n, int k) {
		if (k == 9)
			a[9] = n;
		if (k >= 1 && k <= 8) {
			for (int i = 9; i > k - 1; i--) {
				a[i] = a[i - 1];
			}
			a[k] = n;
		}
		for (int j : a) {
			System.out.print(j + "   ");
		}
	}

	public void divThree(int[] a) {
		for (int i = 0; i < 10; i++) {
			if (a[i] % 3 == 0)
				System.out.print(a[i] + "   ");
		}
	}

	public static void main(String[] args) {
		Practice demo = new Practice();
		int[] arr = new int[10];
		while (true) {
			demo.notice();
			Scanner input = new Scanner(System.in);
			int n = input.nextInt();
			if (n == 0) {
				System.out.println("退出程序");
				break;
			} else {
				switch (n) {
				case 1:
					demo.insertData(arr);
					break;
				case 2:
					demo.showData(arr);
					break;
				case 3:
					System.out.println("请输入要插入的数据:");
					int i = input.nextInt();
					System.out.println("请输入要插入数据的位置:");
					int j = input.nextInt();
					demo.insertAtArray(arr, i, j);
					break;
				case 4:
					demo.divThree(arr);
					break;
				}
			}
		}
	}
}


  • 谢谢jerbiner,我运行了你的代码,对我有很大帮助,非常感谢!同时也发现了一个问题,不知是否正确,所以跟你探讨一下:在“insertAtArry”方法中,a[k]=n,我觉得应该是a[k-1]=n,你觉得呢?
    2017-10-26 19:58:39
  • Jerbiner 回复 Ethan_Lee #2
    对对对!多谢指导了 !因为k表示我们计算的位置,k-1才表示数组中的位置!谢谢你了。
    2017-10-27 09:31:52
  • Ethan_Lee 回复 Jerbiner #3
    嗯,谢谢认可!一起加油
    2017-10-27 09:54:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师