//import java.util.Arrays;
import java.util.Scanner;
public class ArrTest {
public static void main(String[] args) {
// 请在Begin-End间编写完整代码
/********** Begin **********/
// 从控制台获取输入值(当输入值为%时,终止获取),并给数组赋值
Scanner imput =new Scanner(System.in);
int q=imput.nextInt();
int Arrays1 []=new int [q];
for(int i=0;Arrays1[i]!='%'&i<q;i++){
Arrays1[i]=imput.nextInt();}
// 对数组元素求平方并排序
int a[]=new int[Arrays1.length];
for(int i=0;i<Arrays1.length;i++){
a[i]=Arrays1[i]*Arrays1[i];
}
for(int i=0;i<a.length;i++)
for(int j=i+1;j<a.length;j++){
int temp;
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
// 输出新数组
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
/********** End **********/
}
}
一边定义了数组长度,一边又要判断输入 % 结束,这本身就是 相悖的
首先,你的代码有问题,int q=imput.nextInt();这行只能输入数字,想要输入%就会出错,而且int Arrays1 []=new int [q]; 这行代表创建一个数组,如果输入的数字是一个负数也会出错。
// 请在Begin-End间编写完整代码
/********** Begin **********/
// 从控制台获取输入值(当输入值为%时,终止获取),并给数组赋值
Scanner imput = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
//还得校验输入能不能转化为int
while (true){
String info = imput.next();
if (!info.equals("%")){
Integer num =null ;
try {
num = Integer.parseInt(info);
list.add(num);
} catch (NumberFormatException e) {
System.out.println(info +"不是数字");
e.printStackTrace();
}
}else break;
}
Integer[] ints = new Integer[list.size()];
Integer[] Arrays1 = list.toArray(ints);
// 对数组元素求平方并排序
int a[] = new int[Arrays1.length];
for (int i = 0; i < Arrays1.length; i++) {
a[i] = Arrays1[i] * Arrays1[i];
}
for (int i = 0; i < a.length; i++)
for (int j = i + 1; j < a.length; j++) {
int temp;
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
// 输出新数组
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}