package s1; import java.util.Scanner; //题目:输入3个数a,b,c,按大小顺序输出。 public class Fs34 { public static void main(String[] args) { System.out.println("请输入三个数以空格分开"); Scanner s = new Scanner(System.in); int x = s.nextInt(); int y = s.nextInt(); int z = s.nextInt(); if (z>y&&y>x){ int max=z,mid=y,min=x; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } if (z>x&&x>y){ int max=z,mid=x,min=y; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } if (y>x&&x>z){ int max=y,mid=x,min=x; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } if (y>z&&z>x){ int max=y,mid=z,min=x; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } if (x>y&&y>z){ int max=x,mid=y,min=z; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } if (x>z&&z>y){ int max=x,mid=z,min=y; System.out.println("最大"+max+"中间"+ mid +"最大"+min); } } }
其他写法
程序分析:利用指针方法。
public static void main(String[] args) {
System.out.println("请输入三个数:");
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();//获取输入的数
int num2 = scanner.nextInt();
int num3 = scanner.nextInt();
scanner.close();
int temp = 0;
if (num1 >num2) {//确保num2>num1
temp = num1;
num1 = num2;
num2 = temp;
}
if (num1 >num3) {//确保num3>num1
temp = num1;
num1 = num3;
num3 = temp;
}
if (num2 >num3) {//确保num3>num2
temp = num2;
num2 = num3;
num3 = temp;
}
System.out.println("这三个数从大到小排列:"+num3+" "+num2+" "+num1 );
}
}
package s1; import java.util.Scanner; //题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 public class Fs35 { public static void main(String[] args) { int[]a=new int[10]; System.out.println("请输入一个一维数组元素以空格分隔"); Scanner s=new Scanner(System.in); for(int i=0;i<10;i++){ a[i]=s.nextInt(); } int max = a[0];//假设最大值 for(int i =0;i<a.length;i++){if ( max<a [i]){max=a[i];//存放最大值 }} System.out.println("max:"+max); // 最小值 int min = a [0]; for (int i =0;i<a.length;i++){if (min>a[i]){min=a[i];}} System.out.println("min:"+min); System.out.print (min+" "); for (int i=1;i<a.length-1;i++){ System.out.print (a[i]+" "); } System.out.print (max); } } 其他写法
程序分析:1、找到该数组的最大值和最小值
* 找到该数组最大项把它和第一位交换,
* 找到该数值的最小项把它和最后一项交换
* 这里有一点值得注意:不能把最大值和最小值先找出来,再连续执行两次操作交换,会出错!
* 还有一点要注意:没叫到要交换的数值的位置不变,我在网上查了的都会有乱序的
public static void main(String[] args) {
System.out.print("请输入一组数:");
Scanner scan = new Scanner(System.in).useDelimiter("\\s");
int[]arrA = newint[50];
intm = 0;//数组的长度
while(scan.hasNextInt()){//不断给数组A赋值
arrA[m++] =scan.nextInt();
}
scan.close();//关闭输入流
int[]arrB = newint[m];//创建数组B,要求刚好适应输入的数字的个数
for(inti=0;i<m;i++){
arrB[i] =arrA[i];//把数组A不为零的数值赋值给数组B
}
intmax=0;
intmin=arrB[1];//定义数组的最小值
for (inti = 0; i < arrB.length; i++) {
if (arrB[i]>max) {//求数组的最大值
max=arrB[i];
}
if (arrB[i]<=min) {//求数组的最小值
min=arrB[i];
}
}
intmax_i=0;//定义数组最大值的下标
intmin_i=0;//定义数组最小值的下标
for (inti = 0; i < arrB.length; i++) {
if (max==arrB[i]) {
max_i=i;
}
}
inttemp=0;//定义一个交换值
//把最大的值和第一个值交换
temp=arrB[0];
arrB[0]=arrB[max_i];
arrB[max_i]=temp;
//求数组最小值的下标
for (inti = 0; i < arrB.length; i++) {
if (min==arrB[i]) {
min_i=i;
}
}
//把最小的值和最后一个值交换
temp=arrB[arrB.length-1];
arrB[arrB.length-1]=arrB[min_i];
arrB[min_i]=temp;
System.out.println(Arrays.toString(arrB));
scan.close();
}
}
错误的思路第36例子(主要是定义数组不能用不确定的值)
import java.util.Scanner; //题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 public class Fs36 { public static void main(String[] args) { System.out.println("请输入n个整数"); Scanner s=new Scanner(System.in); String [] s1=s.nextLine().split(""); for(int i=0;i<=s1.length-1;i++){ System.out.print(s1[i]); } System.out.println("长度是:"+s1.length); System.out.println("请输入位移位数m少于n个整数个数"); int s2=s.nextInt(); int k=s2; String []a=new String [s1.length]; for (int i=0;i<s1.length;i++){ a[i]=s1[i]; System.out.print (a[i]); } System.out.println (""); for (int i=s2;i<s1.length+1;i++) { a[i] =s1[i-s2]; System.out.print (a[i]); } for (int i=0;i<s2;i++){ a[i] =s1[s1.length-k];k--; System.out.print(a[i]); } } } 正确
package test; import java.util.Arrays; import java.util.Scanner; //有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 public class Test36 { public static void main(String[] args) { System.out.println("请输入10个整数"); int n=10; Scanner s=new Scanner(System.in); int[]a=new int[n]; for(int i=0;i<n;i++){ a[i]=s.nextInt(); } System.out.println("未移动时候的数组"+Arrays.toString(a)); System.out.println("请输入位移位数m少于n个整数个数"); int s2=s.nextInt(); s2%=n; int []a1=new int[n]; int k=s2; for (int i=s2;i<a.length;i++) { a1[i] =a[i-s2]; } for (int i=0;i<s2;i++){ a1[i] =a[a.length-k];k--; } System.out.println(Arrays.toString(a1)); s.close(); } }
参考
package test; import java.util.Arrays; import java.util.Scanner; public class Test361 { public static void main(String[] args) { System.out.println("输入一个十个数的组数:"); Scanner scanner=new Scanner(System.in); int n=10; int[]arrA=new int[n]; for (int i = 0; i < n; i++) { arrA[i]=scanner.nextInt();//获取十个数组 } System.out.println("没移动前的数组:"+ Arrays.toString(arrA)); System.out.println("请输入要往后移动的个数:"); int m=scanner.nextInt();//获取输入往后退的个数 m%=n;//十个相当于循环 int[]arrB=new int[n];//创建和数组A大小一样的数组B int k=m;//创建一个可变的变量 for (int i = m; i < arrA.length;i++) { arrB[i]=arrA[i-m]; } for (int i = 0; i <m;i++) { arrB[i]=arrA[arrA.length-k]; k--; } System.out.println("移动后的数组:"+Arrays.toString(arrB));//输出数组B scanner.close(); } }