请问下面的程序如何结束键盘输入

gzg25895381 2009-04-07 09:46:07
public class MinMax2
{
public static void main(String[] args)
throws java.io.IOException
{
int a;
int max,min;


a = System.in.read();
int[] nums = new int[a];
for(int i = 0;i < nums.length;i++)
{
nums[i] = System.in.read();
}
max = min = nums[0];
for(int i = 1;i < nums.length;i++)
{
if(nums[i] < min)
min = nums[i];
if(nums[i] > max)
max = nums[i];
}
System.out.println("The max of your input is:" + max);
System.out.println("The min of your input is:" + min);
}
}
我想做一小段程序,功能是打印数组中的最大与最小元素的值。
要求:
1、数组的长度从键盘输入;
2、数组中元素的值从键盘输入;
以上是我写的程序,编译时没有问题,我想问的是当程序执行到
for(int i = 0;i < nums.length;i++)
{
nums[i] = System.in.read();
}
时我输入5个数字后,我感觉程序就应该自动给出结果。可是我的程序一点反应没有,继续输入数据仍然没有反应。
请问给位这个程序的错误在哪,怎么解决??
...全文
235 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzg25895381 2009-04-08
  • 打赏
  • 举报
回复
三楼的朋友,我是在dos下运行的,结果就是我说的那样
捏造的信仰 2009-04-08
  • 打赏
  • 举报
回复
楼主我教你怎么贴代码:
1、将代码进行良好的格式化,以方便阅读。
2、在发帖文本框的上方单击“#”按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:

public class Hello {

// 程序入口
public static void main(String[] args) {
System.out.println("Hello!");
}
}
zhizhuo89 2009-04-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 quanjinzhang 的回复:]
程序没有按照你想想的那样执行,是因为你对System.in.read();这句返回值理解有误造成的,
这句返回的是输入的一个字符的ASCII码,如果你第一次输入的是1,这是后a并不是我们想象中的1,而是1的ascii码,即49,那么,你就必须输入49个字符(包含任何字符),这样才能有输出,而且比较出来的也并不是你输入的那些数字,而是那些你输入的字符的ascii码的比较。
[/Quote]
说道问题的渊源了。赞一个。
楼主解决的方法:
把System.in.read();
替换
Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
就可以了。
quanjinzhang 2009-04-07
  • 打赏
  • 举报
回复
受7楼启发,我之前写的代码不能完全实现楼主的本意,现修改如下,应该可以了,哈哈,自己一起稍上了

public class Test {
public static void main(String[] args) throws java.io.IOException {
int a;
int max, min;
System.out.print("请输入数组个数:");
String inputStr = null,strA = "";
inputStr = (char)System.in.read()+"";
while(inputStr.matches("\\d")){
strA += inputStr;
inputStr = (char)System.in.read()+"";
}
a = Integer.parseInt(strA);
int[] nums = new int[a];
boolean isNextNum = true;
for (int i = 0,j=0; i < a && j<a ; i++) {
if(isNextNum){
System.out.print("共需要输入"+a+"个数字,请输入第"+(i+1)+"个数字:");
}
strA = "";
while(inputStr.matches("\\d")||(strA.equals("") && inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)"))){
if(strA.equals("") && inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
inputStr = (char)System.in.read()+"";
continue;
}
strA += inputStr;
inputStr = (char)System.in.read()+"";
}
if(strA.equals("") && !inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
if(i>=j){
i--;
}
while(!inputStr.matches("\\d")){
if(!inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
System.out.print("您输入的不是数字,请重新输入:");
}
inputStr = (char)System.in.read()+"";
}
isNextNum = false;
}
else{
nums[i] = Integer.parseInt(strA);
j++;
isNextNum = true;
}
}
max = min = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] < min)
min = nums[i];
if (nums[i] > max)
max = nums[i];
}
System.out.println("The max of your input is:" + max);
System.out.println("The min of your input is:" + min);
}
}

执行结果:
请输入数组个数:5
共需要输入5个数字,请输入第1个数字:a
您输入的不是数字,请重新输入:1234
共需要输入5个数字,请输入第2个数字:1234534
共需要输入5个数字,请输入第3个数字:a
您输入的不是数字,请重新输入:b
您输入的不是数字,请重新输入:c
您输入的不是数字,请重新输入:11
共需要输入5个数字,请输入第4个数字:999999
共需要输入5个数字,请输入第5个数字:1000000
The max of your input is:1234534
The min of your input is:11
龙飞tgbmlp 2009-04-07
  • 打赏
  • 举报
回复
a = System.in.read();返回值 a 是你输入字符的ascii码 而且read只能read1一字符

package cn.com.year2009.month04.day07;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2009-4-7
* Time: 22:25:26
* To change this template use File | Settings | File Templates.
*/
public class MinMax2 {

public static void main(String[] args) throws java.io.IOException {
int a;
int max, min;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

System.out.println("取得元素中最大与最小值程序");
System.out.print("请输入需要比较的元素个数:");
a=getInputNum(br);
System.out.println();
int[] nums = new int[a];
for (int i = 0; i < nums.length; i++) {
System.out.print("请输入第"+(i+1)+"个数字:");
nums[i]=getInputNum(br);
System.out.println();
}
max = min = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] < min)
min = nums[i];
if (nums[i] > max)
max = nums[i];
}
System.out.println("The max of your input is:" + max);
System.out.println("The min of your input is:" + min);
}

private static int getInputNum(BufferedReader br) {
int ret;
while (true) {
try {
ret=Integer.parseInt(br.readLine());
break;
} catch (Exception e) {
System.out.print("输入字符不是数字,请重新输入:");
}
}
return ret;
}

}
quanjinzhang 2009-04-07
  • 打赏
  • 举报
回复
其实很多时候,我们多写几行System.out.println信息提示或者多看下API文档,或者多进行debug,这些问题自己都能搞定的。
不过还是感谢你让我也清楚地认识了System.in.read()这个方法。
quanjinzhang 2009-04-07
  • 打赏
  • 举报
回复
程序没有按照你想想的那样执行,是因为你对System.in.read();这句返回值理解有误造成的,
这句返回的是输入的一个字符的ASCII码,如果你第一次输入的是1,这是后a并不是我们想象中的1,而是1的ascii码,即49,那么,你就必须输入49个字符(包含任何字符),这样才能有输出,而且比较出来的也并不是你输入的那些数字,而是那些你输入的字符的ascii码的比较。
quanjinzhang 2009-04-07
  • 打赏
  • 举报
回复
看看下面我写的代码,保证没问题:

public class Test {
public static void main(String[] args) throws java.io.IOException {
int a;
int max, min;
System.out.print("请输入数组个数:");
a = System.in.read();
int[] nums = new int[Integer.parseInt((char)a+"")];
for (int i = 0; i < nums.length; i++) {
System.out.print("共需要输入"+nums.length+"个数字,请输入第"+(i+1)+"个数字:");
String inputStr = (char)System.in.read()+"";
try{
nums[i] = Integer.parseInt(inputStr);
}catch(NumberFormatException e){
boolean needReInput = true;
do{
try{
if(inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
inputStr = (char)System.in.read()+"";
}else if(!inputStr.matches("\\d+")){
System.out.print("您输入的不是数字,请重新输入:");
inputStr = (char)System.in.read()+"";
}
nums[i] = Integer.parseInt(inputStr);
needReInput = false;
}catch(NumberFormatException e1){

}
}while(needReInput);
}
}
max = min = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] < min)
min = nums[i];
if (nums[i] > max)
max = nums[i];
}
System.out.println("The max of your input is:" + max);
System.out.println("The min of your input is:" + min);
}
}
xujianping32 2009-04-07
  • 打赏
  • 举报
回复
这个你在哪里运行的?
在DOS下应该是可以的,但是在eclipse就不行。
gzg25895381 2009-04-07
  • 打赏
  • 举报
回复
不对啊,我按了好多的ENTER可是就是一点反应都没有,能帮我解释一下这是为什么吗????
sforiz 2009-04-07
  • 打赏
  • 举报
回复
输入数字后,你是按空格,还是ENTER?
输完后,多按几下ENTER能输出最后的那两句话,但值有问题,不是最值,测试是发现输入的值输出时有问题,不是输入的那个值,自己试试吧,
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端中打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,调用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,调用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们调用pay云函数获取的参数,和上图所需要的是不是一样。六,调用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,调起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回调上图是支付成功的回调,我们可以在支付成功回调时,改变订单支付状态。下图是支付失败的回调,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧