50,528
社区成员
发帖
与我相关
我的任务
分享
package Que2;
import java.util.Scanner;
public class Que2Main {
public static void main(String[] args){
int n;
int fNum;
Scanner in=new Scanner(System.in);
System.out.print("请输入阶数n:");
while(!in.hasNextInt()){
System.out.println("输入出错,请重新输入阶数n:");
}
n=in.nextInt();
lowMat lm=new lowMat(n);
lm.assign();
fNum=in.nextInt(); //Exception in thread "main" java.util.NoSuchElementException
System.out.print("请输入要查找的数字:");
lm.find(fNum);
lm.outPut();
}
}
[quote=引用 14 楼 kingslave1 的回复:] 然而我并没有上过他的课,你应该是认错人了吧。。。。
然而我并没有上过他的课,你应该是认错人了吧。。。。
[quote=引用 11 楼 imilano 的回复:] [quote=引用 10 楼 kingslave1 的回复:] [quote=引用 9 楼 imilano 的回复:] [quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
[quote=引用 10 楼 kingslave1 的回复:] [quote=引用 9 楼 imilano 的回复:] [quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
[quote=引用 2 楼 imilano 的回复:] [quote=引用 1 楼 kingslave1 的回复:] 楼主可以再把lowMat这个类的代码贴出来吗?
package Que2;
import java.util.Scanner;
public class lowMat {
private int n;
private int conNum;
private int num;
private int[] lowMat;
lowMat(int n){
this.n=n;
num=n*(n+1)/2+1;
lowMat=new int[num];
}
public void assign(){
int cnt=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入常数C: ");
while(!in.hasNextInt()) {
System.out.println("无效输入,请重新输入:");
}
conNum=in.nextInt();
System.out.println("请依次输入下三角的值:");
while(in.hasNextInt()&&cnt<num-2) {
lowMat[cnt] =in.nextInt();
cnt++;
}
in.close();
System.out.println("输入成功!");
}
public void find(int fNum){
int i;
int j;
int k;
// Scanner in1=new Scanner(System.in);
boolean isFind=false;
// while(!in.hasNextInt()) {
// System.out.println("无效输入,请重新输入:");
if(fNum==conNum)
System.out.println("此数为常数C。");
for(i=0;i<lowMat.length;i++){
if(lowMat[i]==fNum){
for(j=0;j<n;j++){
for(k=0;k<=j;k++){
if(j*n+k==i){
System.out.println("该数的位置为:("+j+","+k+")");
isFind=true;
}
}
}
}
}
if(!isFind)
System.out.println("该数不存在。");
}
public void outPut(){
int i;
int j;
int cnt=1;
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
System.out.print(lowMat[i*(i+1)/2+j]+" ");
}
do{
System.out.print(conNum+" ");
}while(cnt++<n-j);
System.out.print("\n");
}
}
}
[/quote]
问题果然是处在这个文件里,
public void assign(){
int cnt=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入常数C: ");
while(!in.hasNextInt()) {
System.out.println("无效输入,请重新输入:");
}
conNum=in.nextInt();
System.out.println("请依次输入下三角的值:");
while(in.hasNextInt()&&cnt<num-2) {
lowMat[cnt] =in.nextInt();
cnt++;
}
in.close();
System.out.println("输入成功!");
}
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好[/quote]
哇,真的感谢。送花。
还想请教一下:
in.close()是在lowMat那个类里,可出现异常的那个 fNum=in.nextInt()是在主函数中啊,而且我在类中和主函数中分别定义了两个输入流,应该是不会互相干扰的,就算把lowMat类中的输入流关了 ,对主函数中定义的输入流应该也没有影响的吧,可为什么会出现关闭一个影响另一个的情况?或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
楼主可以再把lowMat这个类的代码贴出来吗?
package Que2;
import java.util.Scanner;
public class lowMat {
private int n;
private int conNum;
private int num;
private int[] lowMat;
lowMat(int n){
this.n=n;
num=n*(n+1)/2+1;
lowMat=new int[num];
}
public void assign(){
int cnt=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入常数C: ");
while(!in.hasNextInt()) {
System.out.println("无效输入,请重新输入:");
}
conNum=in.nextInt();
System.out.println("请依次输入下三角的值:");
while(in.hasNextInt()&&cnt<num-2) {
lowMat[cnt] =in.nextInt();
cnt++;
}
in.close();
System.out.println("输入成功!");
}
public void find(int fNum){
int i;
int j;
int k;
// Scanner in1=new Scanner(System.in);
boolean isFind=false;
// while(!in.hasNextInt()) {
// System.out.println("无效输入,请重新输入:");
if(fNum==conNum)
System.out.println("此数为常数C。");
for(i=0;i<lowMat.length;i++){
if(lowMat[i]==fNum){
for(j=0;j<n;j++){
for(k=0;k<=j;k++){
if(j*n+k==i){
System.out.println("该数的位置为:("+j+","+k+")");
isFind=true;
}
}
}
}
}
if(!isFind)
System.out.println("该数不存在。");
}
public void outPut(){
int i;
int j;
int cnt=1;
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
System.out.print(lowMat[i*(i+1)/2+j]+" ");
}
do{
System.out.print(conNum+" ");
}while(cnt++<n-j);
System.out.print("\n");
}
}
}
[quote=引用 1 楼 kingslave1 的回复:] 楼主可以再把lowMat这个类的代码贴出来吗?
package Que2;
import java.util.Scanner;
public class lowMat {
private int n;
private int conNum;
private int num;
private int[] lowMat;
lowMat(int n){
this.n=n;
num=n*(n+1)/2+1;
lowMat=new int[num];
}
public void assign(){
int cnt=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入常数C: ");
while(!in.hasNextInt()) {
System.out.println("无效输入,请重新输入:");
}
conNum=in.nextInt();
System.out.println("请依次输入下三角的值:");
while(in.hasNextInt()&&cnt<num-2) {
lowMat[cnt] =in.nextInt();
cnt++;
}
in.close();
System.out.println("输入成功!");
}
public void find(int fNum){
int i;
int j;
int k;
// Scanner in1=new Scanner(System.in);
boolean isFind=false;
// while(!in.hasNextInt()) {
// System.out.println("无效输入,请重新输入:");
if(fNum==conNum)
System.out.println("此数为常数C。");
for(i=0;i<lowMat.length;i++){
if(lowMat[i]==fNum){
for(j=0;j<n;j++){
for(k=0;k<=j;k++){
if(j*n+k==i){
System.out.println("该数的位置为:("+j+","+k+")");
isFind=true;
}
}
}
}
}
if(!isFind)
System.out.println("该数不存在。");
}
public void outPut(){
int i;
int j;
int cnt=1;
for(i=0;i<n;i++){
for(j=0;j<=i;j++){
System.out.print(lowMat[i*(i+1)/2+j]+" ");
}
do{
System.out.print(conNum+" ");
}while(cnt++<n-j);
System.out.print("\n");
}
}
}
[/quote]
问题果然是处在这个文件里,
public void assign(){
int cnt=0;
Scanner in=new Scanner(System.in);
System.out.print("请输入常数C: ");
while(!in.hasNextInt()) {
System.out.println("无效输入,请重新输入:");
}
conNum=in.nextInt();
System.out.println("请依次输入下三角的值:");
while(in.hasNextInt()&&cnt<num-2) {
lowMat[cnt] =in.nextInt();
cnt++;
}
in.close();
System.out.println("输入成功!");
}
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好[quote=引用 8 楼 kingslave1 的回复:] [quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
[quote=引用 7 楼 imilano 的回复:] [quote=引用 6 楼 kingslave1 的回复:] [quote=引用 5 楼 imilano 的回复:]或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
[quote=引用 6 楼 kingslave1 的回复:]
[quote=引用 5 楼 imilano 的回复:]
倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好
或是因为我基础没掌握好?
[quote=引用 5 楼 imilano 的回复:]或是因为我基础没掌握好? 倒数第二行,你的in.close()把标准输入流给关闭了,回到main方法时就不知道从哪里接收输入了,把in.close()这一句去掉就好