我有一组数字1-9。我有一组可变数字(例如1-3,1-4或1-7等)。我需要将第二组数字(变量)居中到第一组。如果第二组数字是偶数,则将第二组移近一个。
示例:
123456789
000123000
在上面的示例中,4与1,5相关,与2相关,6与3相关。
或
123456789
001234000
或
123456789
012345670
我很难将问题解决,以便我可以将第二行文本置于第一行的中心位置。 “0”并不重要,并添加到示例中以显示空间差异。我认为这是基本的数学,但我遗漏了一些东西。谢谢你的帮助!
编辑#1:
package com.company;
public class Main {
private static final int maxNumberOfItems = 9;
public static void main(String[] args) {
int numberOfItems = 6; // Any number between 1 and 9.
int difference = maxNumberOfItems - numberOfItems;
int dividedDifference;
boolean isEven = (numberOfItems % 2) == 0;
if (isEven) {
dividedDifference = (difference - 1) / 2;
} else {
dividedDifference = difference / 2;
}
printAnswer(numberOfItems, dividedDifference, isEven);
}
private static void printAnswer(int numberOfItems, int dividedDifference, boolean isEven) {
//TODO: Print answer here to console.
// Desired output:
// 123456789 (represents maxNumberOfItems)
// --1234--- (represents numberOfItems)
// Pseudo logic.
// Figure out if the var numberOfItems is odd or even.
// If its odd, subtract the numberOfItems from the maxNumberOfItems.
// Take that number and divide by two. That gives the amount of spaces to skip on each side.
// If the number is even, subtract one and divide by two. Get the number of spaces on each side
// and add one back to the right side.
}
}
编辑#2:
@Mbo让我详细说明并解释“真正的问题”。所以这里。在3D世界中,我有一组基座,它们将根据要显示的项目数量在四分之一圆中产生。基座位置处于固定的XYZ坐标。这些坐标永远不会改变。位置如下图所示。最多只能有9个基座。我们想要展示的基座是基于我们想要展示的“项目”(我们的变化变量)的数量。理想情况下,我们总是想在中间展示它们。如果数字是偶数,那么我们想要在中间显示基座但是接近1比9.这个编号可以在块引号的问题顶部显示。123456789
001234000
示例图片: Representation of the quarter circle and pedestal locations.
拥有一个包含关键项目编号和值基座位置的Map或HashMap是理想的。只要显示一个基座,就会始终使用位置5.
所以给定地图可能看起来像这样。
示例1:
4项。 9个可能的基座。
项目1(键)到基座3位置(值)。
项目2(关键)到基座4位置(值)。
项目3(关键)到基座5位置(值)。
项目4(关键)到基座6位置(值)。
请注意,上面的示例4并未均匀分为9,因此居中偏移并且更接近于1。
示例2:
3项。 9个可能的基座。
项目1(关键)到基座4位置(值)。
项目2(关键)到基座5位置(值)。
项目3(关键)到基座6位置(值)。
在这个例子中,3很好地划分为9,所以它可以完美地居中。
这是真正的问题。
答案 0 :(得分:0)
似乎你已经完成了工作,目前尚不清楚 - 出了什么问题?
diff = maxNumberOfItems - numberOfItems;
//integer division gives desired result both for even and for odd diff
shift = (maxNumberOfItems - numberOfItems) / 2;
//mapping
location = key + shift;
Number of items shift mapping
9 0 (1->1, 9->9)
8 0 (1->1, 8->8)
7 1 (1->2, 7->8)
6 1 (1->2, 6->7)
5 2 (1->3, 5->7)
4 2 (1->3, 4->6)
3 3 (1->4, 3->6)
2 3 (1->4, 2->5)
1 4 (1->5)
请注意,您可以在数组移位[]
中对这些值进行硬编码答案 1 :(得分:0)
You can simplify your code to determine the value of dividedDifference
.
dividedDifference
represents the number of spaces to the right of the digits in the second row. This is true whether numberOfItems
is even or odd, so isEven
isn't necessary in your printAnswer
method.
You've already performed most of the necessary logic before you invoke printAnswer
, so most of the pseudocode in that method is redundant.
You can print your output to the console like this (the isEven
parameter has been removed, so you'll want to remove that parameter where you're invoking the method too):
private static void printAnswer(int numberOfItems, int dividedDifference) {
for(int i = 1; i <= maxNumberOfItems; i++)
{
System.out.print(i);
}
System.out.println();
System.out.print(StringUtils.repeat(" ", dividedDifference));
for(int i = 1; i <= numberOfItems; i++)
{
System.out.print(i);
}
System.out.print(StringUtils.repeat(" ", maxNumberOfItems - numberOfItems - dividedDifference));
}
Repository containing StringUtils
can be found here.
答案 2 :(得分:0)
实现算法的方法之一是:
public class Main {
private static final int maxNumberOfItems = 9;
public static void main(String[] args) {
int numberOfItems = 1531; // Any number between 1 and 9.
int strLength = Integer.toString(numberOfItems).length(); // the length of the string presentation
printAnswer(numberOfItems, strLength, maxNumberOfItems);
}
private static void printAnswer(int number, int start, int max) {
String str = Integer.toString(number);
for (int i = start; i < max; i++) {
if (i % 2 == 0) { // in this conditions we define from
str += "0"; // which side we need to append "0"
} else {
str = "0" + str;
}
}
System.out.println(str);
}
}
这种实施的主要思想是追加所需数量的&#34; 0&#34;从现有数字解释的两边到字符串。
<强>输出:强>
001531000