我昨天刚刚在我的AP计算机科学课上学习了Arrays,我正在进行一项与接受整数并将它们放入数组有关的任务。如果我甚至不知道它们是什么,我还没有学会如何制作表格以及如何制作2d和3d数组。无论如何,我正在进行的项目是:
“设计并实现一个应用程序,该应用程序读取0到50范围内的任意数量的整数,并计算每个输入的出现次数。在处理完所有输入后,打印所有值(使用输入一次或多次的次数。“
我已经在Stack Overflow上发现了可能的解决方案here:
但我还没有学习hashmap或map,他们的解决方案的输出也不是我想要的。
我对我的问题的了解是如何打印数组的第一行,看起来像这样但没有表格:
我不知道的是如何添加另一行以及如何计算用户输入的整数数量和相同数字的次数。
这是我的代码:
import java.util.Scanner;
public class Si
{
public static void main (String[] args)
{
Scanner scan = new Scanner (System.in);
final int LIMIT = 50;
int[] numbers = new int[LIMIT];
System.out.println("Enter an integer (-1 to quit");
int integer = scan.nextInt();
while (integer != -1)
{
System.out.println("Enter " + integer + " integers between 0 and 50");
int number = scan.nextInt();
if (integer >=0 && integer <= 50){
for (int num = 0; num <= LIMIT; num++){//to make a row from 0 to 50
number[scan.nextInt()]++;//count the integer the user inputs
System.out.println (numbers[num] + " ");//not sure how to continue, I am not sure exactly if i understand the few codes that I typed above
System.out.println();
}
}
}
}
}
我认为我的for循环下面的代码不正确但我不知道我能做什么而不是它会使它工作。以下是可能的输出结果:
1 2 3 4 5 6 7 8 9... 48 49 50 //Row from 1 to 50
3 1 0 2 0 0 0 3 1 0 0 0 //user typed "1" 3 times, typed "2" 1 time...
答案 0 :(得分:1)
所以有几件事。
使用while循环是一个很好的第一步!
我认为你出错的地方for (int num = 0; num <= LIMIT; num++){//to make a row from 0 to 50
你不需要在while循环中每次都这样做。从用户获取所有信息(直到用户输入-1),然后打印所有内容。
考虑存储事件的好方法是创建一个长度为50的数组(就像你已经完成的那样)并递增与用户输入的数字相对应的索引(记住数组是0索引的) 。然后你可以打印2行,其中一行是数字1到50,另一行是使用简单的for循环和print语句打印的。
这是为了帮助您而不为您制定解决方案,特别是因为这似乎是一个家庭作业问题,尝试自己弄清楚这些概念很重要!如果您有更多问题,请随时提出!
答案 1 :(得分:0)
试试这段代码会有所帮助......它会在-1 ...
处打破输入import java.util.Scanner;
class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int[] number = new int[50];
System.out.print("Enter the integers between 0 to 50: ");
for (int i = 0; i < number.length; i++) {
int a = input.nextInt();
number[a] += a;
if (a == -1)
break;
}
for (int i = 0; i < number.length; i++) {
if (number[i] != -1) {
if (number[i] / i > 1)
System.out.println(i + " occurs " + number[i] / i + " times");
else
System.out.println(i + " occurs " + number[i] / i + " time"); }
}
}
}
答案 2 :(得分:0)
以下都可以,但你需要Java8。
is_named_list <- function(lst) {
all(names(tmp_list) != "") & !is.null(names(tmp_list))
}
tmp_list <- list(a = 1, b = 2, 3)
is_named_list(tmp_list)
#FALSE
tmp_list <- list(1, 2, 3)
is_named_list(tmp_list)
#FALSE
tmp_list <- list(a = 1, b = 2, c = 3)
is_named_list(tmp_list)
#TRUE
答案 3 :(得分:0)
如果您不愿意使用HashMap
或ArrayList
,则可以使用两个数组来完成此任务。一个数组让我们称之为nums
,它包含0 to 50
和另一个名为occur
的数组之间的所有整数,它保存每个输入数字的出现。
现在,要处理输入,您需要继续接受用户的输入,直到他输入-1
(如果根据问题陈述,那就是我认为是正确的)。
因此,实现这一目标所需的基本步骤如下:
n = scanner.nextInt()
n
大于50,则忽略它。nums[n]
并同时递增
nth
。{/ li>中的occur[n]
值
n == -1
。现在,代码段应如下所示:
Scanner sc = new Scanner(System.in);
int[] nums = new int[51]; //Array size is 51 since it should hold numbers from 0 to 50 inclusive.
int[]occur = new int[51];
for(;;){
int n = sc.nextInt();
if(n > 50){
continue;
}
if(n == -1){
break;
}
occur[n] += 1;
nums[n] = n;
}
稍后,当控件中断循环时,您可以迭代nums
和occur
并显示如下结果:
System.out.println("All Numbers entered:");
for(int i = 0; i < nums.length; i++){
System.out.print(nums[i] + " ");
}
System.out.println();
System.out.println("All Occurrences: ");
for(int i = 0; i < occur.length; i++){
System.out.print(occur[i] + " ");
}
因此,完整的方法应该是:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nums = new int[51];
int[]occur = new int[51];
for(;;){
int n = sc.nextInt();
if(n > 50){
continue;
}
if(n == -1){
break;
}
occur[n] += 1;
nums[n] = n;
}
System.out.println("All Numbers entered:");
for(int i = 0; i < nums.length; i++){
System.out.print(nums[i] + " ");
}
System.out.println();
System.out.println("All Occurrences: ");
for(int i = 0; i < occur.length; i++){
System.out.print(occur[i] + " ");
}
sc.close();
}
此代码段生成的一个可能输出如下所示:
All Numbers entered:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
All Occurrences:
1 3 5 3 3 3 4 3 3 3 3 3 2 2 2 1 1 1 1 1 2 1 2 3 3 3 3 3 3 1 3 3 3 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 2
我认为这是你想要实现的目标,我希望这可以帮助你学习。
答案 4 :(得分:0)
我开始关注@Shyam Baitmangalkar关于如何做的指示,我用扫描仪做了一些小调整,完成了我的期望。但是,有时我输入&#34; -1&#34;它不会退出。在退出之前我还必须输入许多整数。我认为问题是,if语句不会被执行。无论如何,这是我提出的最终代码:
'use strict';
angular.module('psJwtApp', ['ui.router']).config('psJwtApp',
function ($stateProvider) {
$stateProvider
.state('register', {
url: '/regiter',
templateUrl: 'views/register.html'
})
.state('home', {
url: '/ ',
templateUrl: 'views/main.html'
});
});
输出:
import java.util.Scanner;
public class asdf
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] nums = new int[51];
int[]occur = new int[51];
System.out.println("Enter an integer (-1 to quit)");
int integer = sc.nextInt();
//for(int index = 0; index <= integer; index++ ){
for(;;){
System.out.println("Enter an integer");
int n = sc.nextInt();
if(n > 50){
continue;
}
if(n == -1){
break;
}
occur[n] += 1;
nums[n] = n;
}
System.out.println("All Numbers entered:");
for(int i = 0; i < nums.length; i++){
System.out.print(nums[i] + " ");
}
System.out.println();
System.out.println("All Occurrences: ");
for(int i = 0; i < occur.length; i++){
System.out.print(occur[i] + " ");
}
sc.close();
}
}